2016-12-09 3 views
0

Итак, у меня есть JSON, сохраненный в файле, скажем test.json. Я открываю файл, читаю JSON внутри него в строке, а затем пытаюсь десериализовать его в объект. Файл открывается правильно, строка читается (но escape-строки появляются в строке), и когда я пытаюсь десериализовать его, он возвращает значения null для всех полей объекта, и я не могу понять, почему.C# Json Deserialize возвращает nulls

Вот как JSON сохраняется в файле: http://pastebin.com/Q6hdiJAD

Вот как JSON сохраняется в моей строке после чтения из файла: http://pastebin.com/HaB480Ww

Вот код, который должен десериализации JSON (я принимая несколько jsons из нескольких файлов и десериализации их и добавить их в список):

List<Root> raw = new List<Root>();  
string[] files = Directory.GetFiles(HostingEnvironment.MapPath("~/Content/Files")); 
       foreach (string path in files) 
       { 
        using (StreamReader sr = new StreamReader(path)) 
        { 
         string json = sr.ReadToEnd(); 
         Root root = JsonConvert.DeserializeObject<Root>(json); 
         raw.Add(root); 
        } 
       } 

а вот мой класс:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using APIGovApp.Models; 

namespace APIGovApp.Classes 
{ 
    public class XmlModel 
    { 
     public string Staff { get; set; } 
     public List<Nomenclator> noms { get; set; } 
    } 

    public class Root 
    { 
     public XmlModel nom_localitati { get; set; } 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace APIGovApp.Models 
{ 
    public class Nomenclator 
    { 
     public int cod_jud { get; set; } 
     public int cod { get; set; } 
     public int cod_pol { get; set; } 
     public string denumire { get; set; } 
     public string cod_tpl { get; set; } 
     public int cod_postal { get; set; } 
     public string cod_sar { get; set; } 
     public int cod_loc_jud { get; set; } 
     public int loc_cod { get; set; } 
     public string are_primarie { get; set; } 
     public int cod_fiscal_primarie { get; set; } 
     public int cod_politie_tata { get; set; } 
     public string sar_cod_mf { get; set; } 
     public int cod_siruta { get; set; } 
     public int cod_siruta_tata { get; set; } 
    } 
} 

Я участвую в конкурсе, и мне нужно это как можно быстрее. Пожалуйста помоги.

+0

Имена в вашем 'No menclator' не соответствуют JSON, например 'cod_jud' вместо' JUD_COD'. Загрузите JSON на http://json2csharp.com/, чтобы автоматически генерировать правильный набор классов. – dbc

ответ

0

Мне кажется, что имена свойств списка не совпадают.

В коде:

public List<Nomenclator> noms { get; set; } 

В файле:

{"NOM_LOCALITATI":{"Staff":null,"rand": 

Обратите внимание на Noms против ранда

Rename Noms к рандов или дать анализатору подсказку, добавив следующий атрибут:

[JsonProperty(PropertyName = "rand")] 
public List<Nomenclator> noms { get; set; } 
+0

Должен ли я также изменять поля внутри класса Nomenclator для соответствия тегам внутри каждого «rand»? –

+0

Я думаю, что JsonConvert сначала обрабатывает регистр, а затем не учитывает регистр, поэтому он должен работать, если имена не совпадают, и в этом случае вам придется делать то же самое для них. – JuanR