简体   繁体   English

如何在MVC C#中使用newtonsoft反序列化嵌套的json字符串

[英]How to deserialize a nested json string using newtonsoft in mvc C#

I'm stuck trying to deserialize a nested json. 我一直在尝试反序列化嵌套的json。 I am getting the JSON from world bank api . 我从世界银行api获取JSON。 I would like to get the country id from JSON and value to bind into a dropdownlist. 我想从JSON获取country id和值以绑定到下拉列表中。

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. 这是下面给出的Json。

[  
   {  
      "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; }

   }
}

your json is an array soo you need use JArroy.Parse instead JObject.Parse 您的json是数组,所以您需要使用JArroy.Parse而不是JObject.Parse

Replace 更换

JObject googleSearch = JObject.Parse(googleSearchText);

for 对于

JArray googleSearch = JArray.Parse(googleSearchText);

Then you can navigate de JArray to find your values. 然后,您可以浏览de JArray以查找您的值。

// 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);
}

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: 尽管它是有效的json,但是序列化程序需要一个根对象,因此,如果您可以将json输出修改为根对象,则可以正确地对其进行序列化:

[  
    {
       "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; }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM