Search code examples
c#arraysjsonserializationjson.net

C# Newtonsoft Deserialize JSON with items vs array?


I am struggling on trying to deserialize a JSON string:

{
  "status": "success",
  "result": {
     "campaigns": {
          "1000" : {
              "campaignId": "1000",
              "campaignTitle": "ABC"
          },
          "2000" : {
               "campaignId": "2000",
               "campaignTitle": "ABCD"
         }
    }
}
                

Since the "campaigns" aren't in an array [], how do I handle grabbing each individual campaign details?

json2csharp.com simply has me put the campaignID's as seperate classes, but that doesn't appear optimal.


Solution

  • you have a choice - a dictionary or an Array

    using Newtonsoft.Json;
    
    Dictionary<string, Campaign> dict = JObject.Parse(json)["result"]["campaigns"]
                                           .ToObject<Dictionary<string, Campaign>>();
    
    Campaign[]  arr = ((JObject)JObject.Parse(json)["result"]["campaigns"]).Properties()
                            .Select(x => x.Value.ToObject<Campaign>())
                            .ToArray();
    
    public class Campaign
    {
        public string campaignId { get; set; }
        public string campaignTitle { get; set; }
    }