C#反序列化根JSON未知密钥

时间:2016-12-04 20:39:01

标签: c# json serialization

我有这样的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;}
}

如果我这样做,则反序列化后对象字段为空。

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

任何其他方法将不胜感激,提前致谢。

1 个答案:

答案 0 :(得分: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);

<强>结果:

result

更新

由于您在问题中更改了原始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);