Home > OS >  Deserializing JSON when inner property names vary
Deserializing JSON when inner property names vary

Time:09-24

I have JSON which looks something like this (external JSON beyond my control):

[
  {
    "currencies": {
      "KGS": {
        "name": "Kyrgyzstani som",
        "symbol": "с"
      }
    }
  },
  {
    "currencies": {
      "SOS": {
        "name": "Somali shilling",
        "symbol": "Sh"
      }
    }
  }
]

And I have a set of classes which I would like this JSON deserialized into

public class ParentClass
{
    public OuterClass Currencies { get; set; }
}

public class OuterClass
{
    //Inner property below needs to map to these changing prop names: "KGS", "SOS"
    public InnerClass Inner { get; set; }
}    

public class InnerClass
{
    public string Name { get; set; }
    public string Symbol { get; set; }
}

And Lastly, when I try to deserialize:

JsonConvert.DeserializeObject<IList<ParentClass>>(responseBody.Content);

It's not deserializing properly, because the it cannot map varying Property names to "Inner". Is there a way to handle this scenario?

CodePudding user response:

Newtonsoft didn't seem to have any problem with it..

    public partial class Blah
    {
        [JsonProperty("currencies")]
        public Dictionary<string, Currency> Currencies { get; set; }
    }

    public partial class Currency
    {
        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("symbol")]
        public string Symbol { get; set; }
    }

And

var blah = JsonConvert.DeserializeObject<Blah[]>(jsonString);

enter image description here

..though it's probably worth noting I think you have your parent and outer the wrong way round if this json is just a fragment..

enter image description here

  • Related