C# 如何将带有数组的Json类型转换为.net对象?
我有一个JSON字符串: //覆盖率值是一个数组C# 如何将带有数组的Json类型转换为.net对象?,c#,arrays,json,deserialization,C#,Arrays,Json,Deserialization,我有一个JSON字符串: //覆盖率值是一个数组 string jsonData = @"{ ""plans"": [ { ""plan_code"":""UL500"", ""plan_name"":""Unlimited 500M"", ""days"":1, ""limit"":500, ""coverage"": [ { ""country"":""SE"", }, { ""country"":""BZ"" } ] }, { ""plan_code""
string jsonData = @"{
""plans"":
[
{
""plan_code"":""UL500"",
""plan_name"":""Unlimited 500M"",
""days"":1,
""limit"":500,
""coverage"":
[
{
""country"":""SE"",
},
{
""country"":""BZ""
}
]
},
{
""plan_code"":""UL1GB"",
""plan_name"":""Unlimited 1GB"",
""days"":1,
""limit"":1024,
""coverage"":
[
{
""country"":""SG"",
},
{
""country"":""JP""
}
]
}
]
}
";
下面是JsonConvert.DeserializeObject解析的示例代码:
try
{
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("", content);
var result = await response.Content.ReadAsStringAsync();
var tempRecords = JsonConvert.DeserializeObject<List<plan>>(result);
}
试试看
{
var content=newstringcontent(jsonData,Encoding.UTF8,“application/json”);
HttpResponseMessage response=wait client.PostAsync(“,content”);
var result=await response.Content.ReadAsStringAsync();
var tempRecords=JsonConvert.DeserializeObject(结果);
}
然后我会收到一条错误消息:
“无法将当前JSON对象(例如,{“name\”:\“value\”})反序列化为'System.Collections.Generic.List`1[DAL.plan]”类型,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。\r\n若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或将反序列化类型更改为正常的.NET类型。”(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型),可以从JSON对象反序列化。还可以将JsonObjectAttribute添加到该类型,以强制其从JSON对象反序列化。\r\n路径“plans”,第1行,位置9。“
请为我指明解决此问题的正确方法。整个字符串表示一个具有名为“plans”属性的对象这是指您的数组。字符串本身不是数组,因此,如果您试图将其反序列化为
列表
,这是行不通的。您需要处理这样一个事实,即所需数组由JSON对象包装
.您好,我刚刚看了您的问题,我发现您提供的是json字符串,而不是标准格式的json字符串。这里我给了我一个很好的json字符串,您可以尝试一下
{
"plans": [`enter code here`
{
"plan_code": "UL500",
"plan_name": "Unlimited500M",
"days": 1,
"limit": 500,
"coverage": [
{
"country": "SE"
},
{
"country": "BZ"
}
]
},
{
"plan_code": "UL1GB",
"plan_name": "Unlimited1GB",
"days": 1,
"limit": 1024,
"coverage": [
{
"country": "SG"
},
{
"country": "JP"
}
]
}
]
}
与JSON格式对应的实体不匹配。您的格式是一个对象,该对象有一个属性数组,而不是列表。以下是使用相同JSON的工作代码,来自我的控制台应用程序:
public class Program
{
static void Main(string[] args)
{
string jsonData = "{\"plans\":[{\"plan_code\":\"UL500\",\"plan_name\":\"Unlimited 500M\",\"days\":1,\"limit\":500,\"coverage\":[{\"country\":\"SE\"},{\"country\":\"BZ\"}]},{\"plan_code\":\"UL1GB\",\"plan_name\":\"Unlimited 1GB\",\"days\":1,\"limit\":1024,\"coverage\":[{\"country\":\"SG\"},{\"country\":\"JP\"}]}]}";
var tempRecords = JsonConvert.DeserializeObject<RootObject>(jsonData);
}
}
public class RootObject
{
public List<plan> plans { get; set; }
}
public class plan
{
public string plan_code { get; set; }
public string plan_name { get; set; }
public int days { get; set; }
public int limit { get; set; }
public IList<Country> coverage { get; set; }
}
public class Country
{
public string country { get; set; }
}
公共类程序
{
静态void Main(字符串[]参数)
{
“计划”名称:“:“无限500米”,以及“计划”名称名称:“:“无限500米\”,,“天”:1,”1,“限制”1,“极限”:1,”天:1,“限制”限:1:1:1,“限制”限:500,“覆盖范围”1,”1,“限制”1,”限:1:1:1:1,”1,“限制”:1,”限制:1:1:1:00,目前:00,00,”00,除除:::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,}”;
var tempRecords=JsonConvert.DeserializeObject(jsonData);
}
}
公共类根对象
{
公共列表计划{get;set;}
}
公共班级计划
{
公共字符串计划\ U代码{get;set;}
公共字符串计划名称{get;set;}
公共整数天{get;set;}
公共整数限制{get;set;}
公共IList覆盖{get;set;}
}
公营国家
{
公共字符串国家{get;set;}
}
我创建了适合您的JSON结构的C#类。
请注意,我已经修改了您提供的JSON,因为它的格式似乎不正确。看起来像是重复的,非常感谢!字符串jsonData在我的例子中实际上是动态数据,您给我的示例代码是动态数据well@MaiTrọ如果这有助于解决您的问题,请标记为答案。谢谢您的指导!