I'm looking for the best solution.

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

   "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"]

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

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

  • \$\begingroup\$ 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?) \$\endgroup\$ Jun 4 '18 at 9:35
  • \$\begingroup\$ 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. \$\endgroup\$
    – t3chb0t
    Jun 4 '18 at 9:38
  • \$\begingroup\$ @t3chb0t it cannot be convert directly, because root object it's not an Array \$\endgroup\$ Jun 4 '18 at 10:15
  • \$\begingroup\$ oh, ok, then put it in another object that has a property of this type. \$\endgroup\$
    – t3chb0t
    Jun 4 '18 at 10:16
  • \$\begingroup\$ @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 \$\endgroup\$ 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);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.