问题
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