0

I'm stuck trying to deserialize a nested json. I am getting the JSON from world bank api. I would like to get the country id from JSON and value to bind into a dropdownlist.

I am not sure, what's the wrong?

additional information code to deserialize

JObject googleSearch = JObject.Parse(googleSearchText);

// get JSON result objects into a list IList<JToken> results =
googleSearch["responseData"]["results"].Children().ToList();

// serialize JSON results into .NET objects IList<SearchResult>
searchResults = new List<SearchResult>(); foreach (JToken result in results) {
// JToken.ToObject is a helper method that uses JsonSerializer internally
SearchResult searchResult = result.ToObject<SearchResult>();
searchResults.Add(searchResult); }

Here's the Json given below.

[  
   {  
      "page":1,
      "pages":31,
      "per_page":"10",
      "total":304
   },
   [  
      {  
         "id":"ABW",
         "iso2Code":"AW",
         "name":"Aruba",
         "region":{  
            "id":"LCN",
            "iso2code":"ZJ",
            "value":"Latin America & Caribbean "
         },
         "adminregion":{  
            "id":"",
            "iso2code":"",
            "value":""
         },
         "incomeLevel":{  
            "id":"HIC",
            "iso2code":"XD",
            "value":"High income"
         },
         "lendingType":{  
            "id":"LNX",
            "iso2code":"XX",
            "value":"Not classified"
         },
         "capitalCity":"Oranjestad",
         "longitude":"-70.0167",
         "latitude":"12.5167"
      },
      {  
         "id":"AFG",
         "iso2Code":"AF",
         "name":"Afghanistan",
         "region":{  
            "id":"SAS",
            "iso2code":"8S",
            "value":"South Asia"
         },
         "adminregion":{  
            "id":"SAS",
            "iso2code":"8S",
            "value":"South Asia"
         },
         "incomeLevel":{  
            "id":"LIC",
            "iso2code":"XM",
            "value":"Low income"
         },
         "lendingType":{  
            "id":"IDX",
            "iso2code":"XI",
            "value":"IDA"
         },
         "capitalCity":"Kabul",
         "longitude":"69.1761",
         "latitude":"34.5228"
      },
      {  
         "id":"AFR",
         "iso2Code":"A9",
         "name":"Africa",
         "region":{  
            "id":"NA",
            "iso2code":"NA",
            "value":"Aggregates"
         },
         "adminregion":{  
            "id":"",
            "iso2code":"",
            "value":""
         },
         "incomeLevel":{  
            "id":"NA",
            "iso2code":"NA",
            "value":"Aggregates"
         },
         "lendingType":{  
            "id":"",
            "iso2code":"",
            "value":"Aggregates"
         },
         "capitalCity":"",
         "longitude":"",
         "latitude":""
      },
      {  
         "id":"AGO",
         "iso2Code":"AO",
         "name":"Angola",
         "region":{  
            "id":"SSF",
            "iso2code":"ZG",
            "value":"Sub-Saharan Africa "
         },
         "adminregion":{  
            "id":"SSA",
            "iso2code":"ZF",
            "value":"Sub-Saharan Africa (excluding high income)"
         },
         "incomeLevel":{  
            "id":"LMC",
            "iso2code":"XN",
            "value":"Lower middle income"
         },
         "lendingType":{  
            "id":"IBD",
            "iso2code":"XF",
            "value":"IBRD"
         },
         "capitalCity":"Luanda",
         "longitude":"13.242",
         "latitude":"-8.81155"
      },
      {  
         "id":"ALB",
         "iso2Code":"AL",
         "name":"Albania",
         "region":{  
            "id":"ECS",
            "iso2code":"Z7",
            "value":"Europe & Central Asia"
         },
         "adminregion":{  
            "id":"ECA",
            "iso2code":"7E",
            "value":"Europe & Central Asia (excluding high income)"
         },
         "incomeLevel":{  
            "id":"UMC",
            "iso2code":"XT",
            "value":"Upper middle income"
         },
         "lendingType":{  
            "id":"IBD",
            "iso2code":"XF",
            "value":"IBRD"
         },
         "capitalCity":"Tirane",
         "longitude":"19.8172",
         "latitude":"41.3317"
      },
      {  
         "id":"AND",
         "iso2Code":"AD",
         "name":"Andorra",
         "region":{  
            "id":"ECS",
            "iso2code":"Z7",
            "value":"Europe & Central Asia"
         },
         "adminregion":{  
            "id":"",
            "iso2code":"",
            "value":""
         },
         "incomeLevel":{  
            "id":"HIC",
            "iso2code":"XD",
            "value":"High income"
         },
         "lendingType":{  
            "id":"LNX",
            "iso2code":"XX",
            "value":"Not classified"
         },
         "capitalCity":"Andorra la Vella",
         "longitude":"1.5218",
         "latitude":"42.5075"
      },
      {  
         "id":"ANR",
         "iso2Code":"L5",
         "name":"Andean Region",
         "region":{  
            "id":"NA",
            "iso2code":"NA",
            "value":"Aggregates"
         },
         "adminregion":{  
            "id":"",
            "iso2code":"",
            "value":""
         },
         "incomeLevel":{  
            "id":"NA",
            "iso2code":"NA",
            "value":"Aggregates"
         },
         "lendingType":{  
            "id":"",
            "iso2code":"",
            "value":"Aggregates"
         },
         "capitalCity":"",
         "longitude":"",
         "latitude":""
      },
      {  
         "id":"ARB",
         "iso2Code":"1A",
         "name":"Arab World",
         "region":{  
            "id":"NA",
            "iso2code":"NA",
            "value":"Aggregates"
         },
         "adminregion":{  
            "id":"",
            "iso2code":"",
            "value":""
         },
         "incomeLevel":{  
            "id":"NA",
            "iso2code":"NA",
            "value":"Aggregates"
         },
         "lendingType":{  
            "id":"",
            "iso2code":"",
            "value":"Aggregates"
         },
         "capitalCity":"",
         "longitude":"",
         "latitude":""
      },
      {  
         "id":"ARE",
         "iso2Code":"AE",
         "name":"United Arab Emirates",
         "region":{  
            "id":"MEA",
            "iso2code":"ZQ",
            "value":"Middle East & North Africa"
         },
         "adminregion":{  
            "id":"",
            "iso2code":"",
            "value":""
         },
         "incomeLevel":{  
            "id":"HIC",
            "iso2code":"XD",
            "value":"High income"
         },
         "lendingType":{  
            "id":"LNX",
            "iso2code":"XX",
            "value":"Not classified"
         },
         "capitalCity":"Abu Dhabi",
         "longitude":"54.3705",
         "latitude":"24.4764"
      },
      {  
         "id":"ARG",
         "iso2Code":"AR",
         "name":"Argentina",
         "region":{  
            "id":"LCN",
            "iso2code":"ZJ",
            "value":"Latin America & Caribbean "
         },
         "adminregion":{  
            "id":"LAC",
            "iso2code":"XJ",
            "value":"Latin America & Caribbean (excluding high income)"
         },
         "incomeLevel":{  
            "id":"UMC",
            "iso2code":"XT",
            "value":"Upper middle income"
         },
         "lendingType":{  
            "id":"IBD",
            "iso2code":"XF",
            "value":"IBRD"
         },
         "capitalCity":"Buenos Aires",
         "longitude":"-58.4173",
         "latitude":"-34.6118"
      }
   ]
]

Given the code below. This is my model:

Using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

    namespace ejemplo.Models
   {
    public class Paginacion
    {
        public Paginacion()
        {
            this.List = new List<Data>();
        }

        [JsonProperty("page")]
        public int Page { get; set; }

        [JsonProperty("pages")]
        public int Pages { get; set; }

        [JsonProperty("per_page")]
        public string PerPage { get; set; }

        [JsonProperty("total")]
        public int Total { get; set; }

        public List<Data> List { get; set; }
    }

    public class Country
    {
        [JsonProperty("id")]
        public string Id { get; set; }

        [JsonProperty("value")]
        public string Value { get; set; }
    }

    public class Indicator
    {
        [JsonProperty("id")]
        public string Id { get; set; }

        [JsonProperty("value")]
        public string Value { get; set; }
    }

public class Data
{
    public Data()
    {
        this.Indicator = new Indicator();
        this.Country = new Country();
    }

    [JsonProperty("indicator")]
    public Indicator Indicator { get; set; }

    [JsonProperty("country")]
    public Country Country { get; set; }

    [JsonProperty("date")]
    public string Date { get; set; }

    [JsonProperty("value")]
    public string Value { get; set; }

    [JsonProperty("decimal")]
    public string Decimal { get; set; }

   }
}
3
  • Is there an error you're getting? Commented Jun 1, 2018 at 16:06
  • try generating model using this app.quicktype.io/#l=cs&r=json2csharp Commented Jun 1, 2018 at 16:39
  • @MarkC. i got the error on line: Info = JsonConvert.DeserializeObject<List<Paginacion>>(json); Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'ejemplo.Models.Paginacion' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. Commented Jun 1, 2018 at 17:06

2 Answers 2

1

your json is an array soo you need use JArroy.Parse instead JObject.Parse

Replace

JObject googleSearch = JObject.Parse(googleSearchText);

for

JArray googleSearch = JArray.Parse(googleSearchText);

Then you can navigate de JArray to find your values.

// get JSON result objects into a list IList<JToken> results =
var results = googleSearch.Last.ToList();

// serialize JSON results into .NET objects IList<SearchResult>
List<Country> countyList = new List<Country>();

foreach (JToken result in results)
{
    // JToken.ToObject is a helper method that uses JsonSerializer internally
    var country = new Country { Id = result["id"].ToString(), Value = result["name"].ToString() };
    countyList.Add(country);
}
Sign up to request clarification or add additional context in comments.

Comments

0

Although it is valid json, the serializer expects a root object so if you can modify the json output to a root object, you can serialize it correctly:

[  
    {
       "page": {  
          "page":1,
          "pages":31,
          "per_page":"10",
          "total":304
       },
       "data": [  
          {  
             "id":"ABW",
             "iso2Code":"AW",
             "name":"Aruba",
             "region":{  
                "id":"LCN",
                "iso2code":"ZJ",
                "value":"Latin America & Caribbean "
             },
             "adminregion":{  
                "id":"",
                "iso2code":"",
                "value":""
             },
             "incomeLevel":{  
                "id":"HIC",
                "iso2code":"XD",
                "value":"High income"
             },
             "lendingType":{  
                "id":"LNX",
                "iso2code":"XX",
                "value":"Not classified"
             },
             "capitalCity":"Oranjestad",
             "longitude":"-70.0167",
             "latitude":"12.5167"
          },
          {  
             "id":"AFG",
             "iso2Code":"AF",
             "name":"Afghanistan",
             "region":{  
                "id":"SAS",
                "iso2code":"8S",
                "value":"South Asia"
             },
             "adminregion":{  
                "id":"SAS",
                "iso2code":"8S",
                "value":"South Asia"
             },
             "incomeLevel":{  
                "id":"LIC",
                "iso2code":"XM",
                "value":"Low income"
             },
             "lendingType":{  
                "id":"IDX",
                "iso2code":"XI",
                "value":"IDA"
             },
             "capitalCity":"Kabul",
             "longitude":"69.1761",
             "latitude":"34.5228"
          },
          {  
             "id":"AFR",
             "iso2Code":"A9",
             "name":"Africa",
             "region":{  
                "id":"NA",
                "iso2code":"NA",
                "value":"Aggregates"
             },
             "adminregion":{  
                "id":"",
                "iso2code":"",
                "value":""
             },
             "incomeLevel":{  
                "id":"NA",
                "iso2code":"NA",
                "value":"Aggregates"
             },
             "lendingType":{  
                "id":"",
                "iso2code":"",
                "value":"Aggregates"
             },
             "capitalCity":"",
             "longitude":"",
             "latitude":""
          },
          {  
             "id":"AGO",
             "iso2Code":"AO",
             "name":"Angola",
             "region":{  
                "id":"SSF",
                "iso2code":"ZG",
                "value":"Sub-Saharan Africa "
             },
             "adminregion":{  
                "id":"SSA",
                "iso2code":"ZF",
                "value":"Sub-Saharan Africa (excluding high income)"
             },
             "incomeLevel":{  
                "id":"LMC",
                "iso2code":"XN",
                "value":"Lower middle income"
             },
             "lendingType":{  
                "id":"IBD",
                "iso2code":"XF",
                "value":"IBRD"
             },
             "capitalCity":"Luanda",
             "longitude":"13.242",
             "latitude":"-8.81155"
          },
          {  
             "id":"ALB",
             "iso2Code":"AL",
             "name":"Albania",
             "region":{  
                "id":"ECS",
                "iso2code":"Z7",
                "value":"Europe & Central Asia"
             },
             "adminregion":{  
                "id":"ECA",
                "iso2code":"7E",
                "value":"Europe & Central Asia (excluding high income)"
             },
             "incomeLevel":{  
                "id":"UMC",
                "iso2code":"XT",
                "value":"Upper middle income"
             },
             "lendingType":{  
                "id":"IBD",
                "iso2code":"XF",
                "value":"IBRD"
             },
             "capitalCity":"Tirane",
             "longitude":"19.8172",
             "latitude":"41.3317"
          },
          {  
             "id":"AND",
             "iso2Code":"AD",
             "name":"Andorra",
             "region":{  
                "id":"ECS",
                "iso2code":"Z7",
                "value":"Europe & Central Asia"
             },
             "adminregion":{  
                "id":"",
                "iso2code":"",
                "value":""
             },
             "incomeLevel":{  
                "id":"HIC",
                "iso2code":"XD",
                "value":"High income"
             },
             "lendingType":{  
                "id":"LNX",
                "iso2code":"XX",
                "value":"Not classified"
             },
             "capitalCity":"Andorra la Vella",
             "longitude":"1.5218",
             "latitude":"42.5075"
          },
          {  
             "id":"ANR",
             "iso2Code":"L5",
             "name":"Andean Region",
             "region":{  
                "id":"NA",
                "iso2code":"NA",
                "value":"Aggregates"
             },
             "adminregion":{  
                "id":"",
                "iso2code":"",
                "value":""
             },
             "incomeLevel":{  
                "id":"NA",
                "iso2code":"NA",
                "value":"Aggregates"
             },
             "lendingType":{  
                "id":"",
                "iso2code":"",
                "value":"Aggregates"
             },
             "capitalCity":"",
             "longitude":"",
             "latitude":""
          },
          {  
             "id":"ARB",
             "iso2Code":"1A",
             "name":"Arab World",
             "region":{  
                "id":"NA",
                "iso2code":"NA",
                "value":"Aggregates"
             },
             "adminregion":{  
                "id":"",
                "iso2code":"",
                "value":""
             },
             "incomeLevel":{  
                "id":"NA",
                "iso2code":"NA",
                "value":"Aggregates"
             },
             "lendingType":{  
                "id":"",
                "iso2code":"",
                "value":"Aggregates"
             },
             "capitalCity":"",
             "longitude":"",
             "latitude":""
          },
          {  
             "id":"ARE",
             "iso2Code":"AE",
             "name":"United Arab Emirates",
             "region":{  
                "id":"MEA",
                "iso2code":"ZQ",
                "value":"Middle East & North Africa"
             },
             "adminregion":{  
                "id":"",
                "iso2code":"",
                "value":""
             },
             "incomeLevel":{  
                "id":"HIC",
                "iso2code":"XD",
                "value":"High income"
             },
             "lendingType":{  
                "id":"LNX",
                "iso2code":"XX",
                "value":"Not classified"
             },
             "capitalCity":"Abu Dhabi",
             "longitude":"54.3705",
             "latitude":"24.4764"
          },
          {  
             "id":"ARG",
             "iso2Code":"AR",
             "name":"Argentina",
             "region":{  
                "id":"LCN",
                "iso2code":"ZJ",
                "value":"Latin America & Caribbean "
             },
             "adminregion":{  
                "id":"LAC",
                "iso2code":"XJ",
                "value":"Latin America & Caribbean (excluding high income)"
             },
             "incomeLevel":{  
                "id":"UMC",
                "iso2code":"XT",
                "value":"Upper middle income"
             },
             "lendingType":{  
                "id":"IBD",
                "iso2code":"XF",
                "value":"IBRD"
             },
             "capitalCity":"Buenos Aires",
             "longitude":"-58.4173",
             "latitude":"-34.6118"
          }
       ]
    }
]

Classes:

public class RootObject
{
    public Page page { get; set; }
    public List<Datum> data { get; set; }
}

public class Page
{
    public int page { get; set; }
    public int pages { get; set; }
    public string per_page { get; set; }
    public int total { get; set; }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.