[英]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.