首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在mvc C#中使用newtonsoft对嵌套的json字符串进行反序列化

如何在mvc C#中使用newtonsoft对嵌套的json字符串进行反序列化
EN

Stack Overflow用户
提问于 2018-06-02 00:04:04
回答 2查看 563关注 0票数 0

我在尝试反序列化嵌套的json时被卡住了。我正在从world bank api获取JSON。我想从JSON中获取country id并将其值绑定到下拉列表中。

我不确定,出什么事了?

要反序列化的附加信息代码

代码语言:javascript
复制
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); }

这是下面给出的Json。

代码语言:javascript
复制
[  
   {  
      "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"
      }
   ]
]

给定下面的代码。这是我的模型:

代码语言:javascript
复制
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; }

   }
}
EN

回答 2

Stack Overflow用户

发布于 2018-06-02 04:25:46

你的JObject.Parse是一个数组,所以你需要用JArroy.Parse代替json

替换

代码语言:javascript
复制
JObject googleSearch = JObject.Parse(googleSearchText);

代码语言:javascript
复制
JArray googleSearch = JArray.Parse(googleSearchText);

然后,您可以导航de JArray来查找您的值。

代码语言:javascript
复制
// 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);
}
票数 1
EN

Stack Overflow用户

发布于 2018-06-02 03:09:09

尽管它是有效的json,但序列化程序需要一个根对象,所以如果您可以将json输出修改为一个根对象,您就可以正确地序列化它:

代码语言:javascript
复制
[  
    {
       "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"
          }
       ]
    }
]

类:

代码语言:javascript
复制
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; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50647304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档