2015-11-20 3 views
0

Я прочитал несколько статей, но вратаря исправить мою проблему, у меня есть проблемы с JSON строки, когда Deserialize, здесь строкадесериализации Json строка C# с помощью Newtonsoft.JSON

{"table":"sy_version","effected":2,"data":[{"mod_id":"CS","sub_mod":"sbm_sl.exe","version":"2015.11.07.1","upload_date ":"2015-11-10 11:34:13"},{"mod_id":"FA","sub_mod":"sbm_fa.exe","version":"2015.11.09","upload_date ":"2015-11-10 11:34:13"}]}  

И это мой класс

public class Datum 
    { 
     public string mod_id { get; set; } 
     public string sub_mod { get; set; } 
     public string version { get; set; } 
     public DateTime upload_date { get; set; } 
    } 

    public class sy_periode 
    { 
     public string table { get; set; } 
     public int effected { get; set; } 
     public IList<Datum> datas { get; set; } 
    } 

    public static void test(string str) { 
     // dynamic sy_periode = JsonConvert.DeserializeObject(str); 
     var sy_periode = JsonConvert.DeserializeObject<sy_periode>(str); 
     foreach (var data in sy_periode.datas) 
     { 
      Console.WriteLine(data.sub_mod); 
     } 

    } 

Когда я выполнил, строка таблицы и осуществляются имеет значение, но Данные имеет нулевое значение, это сообщение об ошибке

Object reference not set to an instance of an object. 
+0

Использование интегрированных IDE в отладчике; это намного быстрее, чем использование StackOverflow в качестве отладчика. Даже быстрый просмотр кода подобрал бы опечатку :) – developerbmw

ответ

2

Это не должно быть datas, он должен иметь такое же имя, как объект JSON: data.

Вот правильная структура классов:

public class Datum 
{ 
    public string mod_id { get; set; } 
    public string sub_mod { get; set; } 
    public string version { get; set; } 
    public DateTime upload_date { get; set; } 
} 

public class sy_periode 
{ 
    public string table { get; set; } 
    public int effected { get; set; } 
    public IList<Datum> data { get; set; } 
}  

Кроме того, обратите внимание, что в JSON ваши upload_date свойств имеют нечетные пробела в конце концов: upload_date. Это может быть опечатка. Однако, если это фактический ввод и поскольку C# имя члена не может содержать пробелы, вы можете попробовать указать имя, чтобы сериализовать:

[JsonProperty(PropertyName = "upload_date ")] 
public DateTime upload_date { get; set; } 

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

+0

Что это, Спасибо за вашу помощь. –

Смежные вопросы