0

I'm running into an issue when I am trying to deserialize a webAPI GET call that returns a JSON object. The issue being one particular property is always null after being deserialized.

The JSON object looks like this:

    {  
   "status":"OK",
   "masterlist":{  
      "session":{  
         "session_id":intValue,
         "session_name":"stringValue"
      },
      "0":{  
         "bill_id":intValue,
         "number":"stringValue",
         "change_hash":"stringValue",
         "url":"stringValue",
         "status_date":"dateValue",
         "status":"stringValue",
         "last_action_date":"dateValue",
         "last_action":"stringValue",
         "title":"stringValue",
         "description":"stringValue"
      },
      "1":{  
         "bill_id":intValue,
         "number":"stringValue",
         "change_hash":"stringValue",
         "url":"stringValue",
         "status_date":"dateValue",
         "status":"stringValue",
         "last_action_date":"dateValue",
         "last_action":"stringValue",
         "title":"stringValue",
         "description":"stringValue"
      },
      "2":{  
         "bill_id":intValue,
         "number":"stringValue",
         "change_hash":"stringValue",
         "url":"stringValue",
         "status_date":"dateValue",
         "status":"stringValue",
         "last_action_date":"dateValue",
         "last_action":"stringValue",
         "title":"stringValue",
         "description":"stringValue"
      }
   }
}

As you can see the second property of masterlist isn't an array, that would make life too easy... But it looks more like a collection of name/value pairs. I have reviewed This post and the associated one listed within but they both pertain to if the name/value pair where at the root level where mine is not.

My method that I am using to deserialize is:

        BillMaster billMasterList = new BillMaster();

        using (HttpClient client = new HttpClient())
        {
            string json = Get("&op=getMasterList&state=TN");

            billMasterList = JsonConvert.DeserializeObject<BillMaster>(json);
        }

And the model classes the deserializer is binding to:

public class BillMaster
{
    public string Status { get; set; }
    public BillMasterList masterlist { get; set; }
}

public class BillMasterList
{
    public BillMasterList_Session session { get; set; }
    public Dictionary<int, BillMasterList_Array> BillMasterList_Array { get; set; }
}

public class BillMasterList_Array
{
    public int bill_id { get; set; }
    public string number { get; set; }
    public string change_hash { get; set; }
    public string url { get; set; }
    public string status_date { get; set; }
    public string status { get; set; }
    public string last_action_date { get; set; }
    public string last_action { get; set; }
    public string title { get; set; }
    public string description { get; set; }
}

When I run the code I don't throw any errors and I have values in my object except for BillMasterList_Array, that is always null. I'm obviously not doing something right but what it is alludes me.

  • This json field have data? – Tomato32 Sep 21 '17 at 03:18
  • Would `JsonTypedExtensionDataAttribute` along with `TypedExtensionDataConverter` from [How to deserialize a child object with dynamic (numeric) key names?](https://stackoverflow.com/a/40094403/3744182) meet your needs? – dbc Sep 21 '17 at 05:39
  • @Tomato32 yes, all elements have data. I stripped them out and replaced them with their primitive type for brevity. – user3498566 Sep 21 '17 at 12:43

0 Answers0