0

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 Answer 1

3

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:

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);
Sign up to request clarification or add additional context in comments.

2 Comments

I still have a RootObject class, which is the one I would like to deserialize, because it has some other data I need. Thanks
@querty123 it's important to know the whole structure of the complete JSON response in order to deserialize

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.