C# Deserialize Root JSON Unknown Keys

故事扮演 提交于 2020-01-11 13:07:34

问题


I have a JSON like this and have to deserialize it:

{
  "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"
}

Similar to this question, except the answer given doesn't work, because I don't have the luxury of creating a class like this

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

If I do than the Objects field is null after deserialization.

Both the root object and book object are dynamic.

Any other approaches would be appreciated, Thanks in advance.


回答1:


Because the JSON you have does not contains a RootObject that holds a dictionary, you can deserialize straight into a Dictionary like so:

Class:

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

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}

Deserialize:

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

Result:


Update:

Since you have changed the original JSON in your question, the second given JSON can be deserialized as so:

Class:

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; }
}

Deserialize:

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


来源:https://stackoverflow.com/questions/40963377/c-sharp-deserialize-root-json-unknown-keys

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!