【问题标题】:C# Deserialize Root JSON Unknown KeysC# 反序列化根 JSON 未知键
【发布时间】:2017-01-17 02:47:10
【问题描述】:

我有一个这样的 JSON,必须反序列化它:

{
  "0": {
    "foo_id":"xyz",
    "bar_id":"abc",
    "book": {
      "0": {
        "title":"hello",
        "author":"person_x"
      },
      "1": {
        "title":"hi",
        "author":"person_y"
      }
  },
  "1": {
    "foo_id":"xyz",
    "bar_id":"abc",
    "book": {
      "0": {
        "title":"hello",
        "author":"person_a"
      },
      "1": {
        "title":"bye",
        "author":"person_b"
      }
  },
  "random":"string",
  "other":"thing"
}

类似于this问题,除了给出的答案不起作用,因为我没有创建这样的类的奢侈

public class RootObject
{
    public Dictionary<string, Object> Objects {get; set;}
}

如果我这样做了,反序列化后 Objects 字段为空。

根对象和书对象都是动态的。

任何其他方法将不胜感激,在此先感谢。

【问题讨论】:

    标签: c# json serialization


    【解决方案1】:

    因为您拥有的 JSON 包含 拥有字典的 RootObject,所以您可以像这样直接反序列化为 Dictionary

    类:

    public class Item
    {
        [JsonProperty("foo_id")]
        public string FooId { get; set; }
    
        [JsonProperty("bar_id")]
        public string BarId { get; set; }
    }
    

    反序列化:

    var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
    

    结果:


    更新:

    由于您更改了问题中的原始 JSON,因此可以对给定的第二个 JSON 进行反序列化:

    类:

    public class RootObject
    {
        [JsonExtensionData]
        public Dictionary<string, JToken> Items { get; set; }
    
        [JsonProperty("random")]
        public string Random { get; set; }
    
        [JsonProperty("other")]
        public string Other { get; set; }
    }
    

    反序列化:

    var result = JsonConvert.DeserializeObject<RootObject>(json);
    

    【讨论】:

    • 我还有一个 RootObject 类,这是我想要反序列化的类,因为它还有一些我需要的其他数据。谢谢
    • @querty123 了解完整 JSON 响应的整个结构以便反序列化很重要
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多