【问题标题】:Json.NET deserializing object returns nullJson.NET 反序列化对象返回 null
【发布时间】:2014-01-22 11:57:02
【问题描述】:

我想反序列化一个字符串 o JSON 并在一个字符串上输出数据:

public class Test
{
    public int id { get; set; }
    public string name { get; set; }
    public long revisionDate { get; set; }
}

private void btnRetrieve_Click(object sender, EventArgs e)
{
    string json = @"{""Name"":{""id"":10,""name"":""Name"",""revisionDate"":1390293827000}}";
    var output = JsonConvert.DeserializeObject<Test>(json);
    lblOutput.Text = output.name;
}

这旨在输出字符串jsonname 属性。但是,它什么也不返回。

【问题讨论】:

    标签: c# json object json.net


    【解决方案1】:

    您发布的 JSON 可以反序列化为具有 Test 类型的 Name 属性的对象,而不是 Test 实例。

    这个

    string json = @"{""id"":10,""name"":""Name"",""revisionDate"":1390293827000}";
    

    将是 Test 实例的表示。

    您的 JSON 可能会被反序列化为如下内容:

    public class Test
    {
       public int id { get; set; }
       public string name { get; set; }
       public long revisionDate { get; set; }
    }
    
    public class Foo
    {
        public Test Name { get; set; }
    }
    
    // ...
    
    
    var output = JsonConvert.DeserializeObject<Foo>(json);
    lblOutput.Text = output.Name.name;
    

    【讨论】:

    • 除此之外,有时将您的 JSON 放入可视化工具中会有所帮助,以便看到这些事情突然出现在您身上:jsoneditoronline.org
    【解决方案2】:

    Test类的有效json如下

    { “姓名”: { “身份证”:10, “名称”:“名称”, “修订日期”:1390293827000 } }

    而且你的 json 包含更多的数据,然后只有测试类 所以你也可以使用like

    Dictionary<string,Test> dictionary= JsonConvert.DeserializeObject<Dictionary<string,Test>>(json);
    
    Test oputput=dictionary["Name"];  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多