# Convert Json response to object array

I'm looking for the best solution.

Here is a response from server and i need to get Organizations list:

Content-Type:application/json;charset=UTF-8
{
"code": 0,
"message": "success",
"organizations": [
{
"organization_id": "10234695",
"name": "Zillum",
"contact_name": "John Smith",
"email": "johnsmith@zillum.com",
"is_default_org": false,
"language_code": "en",
"fiscal_year_start_month": 0,
"account_created_date": "2016-02-18",
"time_zone": "PST",
"is_org_active": true,
"currency_id": "460000000000097",
"currency_code": "USD",
"currency_symbol": "\$",
"currency_format": "###,##0.00",
"price_precision": 2
},
{...},
{...}
]


Here is my convert method:

var contentJson = await SendRequest(request);
var contentJo = (JObject)JsonConvert.DeserializeObject(contentJson);
var organizationsJArray = contentJo["organizations"]
.Value<JArray>();

var organizations = organizationsJArray.ToObject<List<Organization>>();


Code works, but I'm looking for a better Convert Method. Can I do without converting to JArray?

• You're not handling errors and corner-cases but, well, that might be OK...is there a specific goal? To me this small snippet looks OK (I have, maybe, just few opinionated minor style comments) but you may have some more specific issues in mind (performance? maintainability?) Jun 4 '18 at 9:35
• You can use the List<Organization> in the same way as a generic parameter for the DeserializeObject method. There's no need to create the JObject first. Jun 4 '18 at 9:38
• @t3chb0t it cannot be convert directly, because root object it's not an Array Jun 4 '18 at 10:15
• oh, ok, then put it in another object that has a property of this type. Jun 4 '18 at 10:16
• @AdrianoRepetti Yeah, thanks a lot. I'm using error handling. I thought that there is a shorter conversion, because I'm not familiar with the methods Newtonsoft.Json Jun 4 '18 at 10:23

Given that you are already using the ToObject, consider simplifying the code for readability and the advantage of not having to convert anything.

var contentJson = await SendRequest(request);
dynamic response = JsonConvert.DeserializeObject(contentJson);
List<Organization> organizations = response.organizations.ToObject<List<Organization>>();


The actual response appears to be of no concern so using a dynamic simplifies things. Converting back to strongly typed objects by calling ToObject<T> was a good choice and should work out fine.

Json.Net will (by default) accept missing fields without a problem when doing typed deserialization, so I believe you can do:

class ContentData
{
public List<Organization> organizations;
}

...

var contentData = JsonConvert.DeserializeObject<ContentData>(contentJson);
DoSomething(contentData.organizations);