繁体   English   中英

使用Newtonsoft.JSON用C#反序列化Json字符串

[英]Deserializing Json string with C# using Newtonsoft.JSON

我读过一些文章,但没有解决我的问题,反序列化时,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.

它不应该是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; }

我不太确定它是否会起作用,但是我看不出为什么它不起作用的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM