我已经阅读了一些文章,但没有解决我的问题,我在反序列化时遇到了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 :(得分: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; }
我不太确定它会起作用,但我认为没有理由不这样做。