无法将JSON数组(例如[1,2,3])反序列化为类型''因为类型需要JSON对象(例如{“name”:“value”})才能正确反序列化我有这个JSON:[
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 1",
"Values": [
"Acc 1"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "1",
"Values": [
"1"
]
}
}
],
"Name": "account",
"Id": "1"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 2",
"Values": [
"Acc 2"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "2",
"Values": [
"2"
]
}
}
],
"Name": "account",
"Id": "2"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 3",
"Values": [
"Acc 3"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "3",
"Values": [
"3"
]
}
}
],
"Name": "account",
"Id": "2"
}]但我收到这个错误:无法将当前JSON数组(例如[1,2,3])反序列化为类型'test.Model.RetrieveMultipleResponse',因为该类型需要JSON对象(例如{“name”:“value”})才能正确反序列化。要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),例如List从JSON数组反序列化。JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化。路径'',第1行,第1位。
3 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
您的json字符串包含在方括号([]
)中,因此它被解释为数组而不是单个RetrieveMultipleResponse
对象。因此,您需要将其反序列化为类型集合RetrieveMultipleResponse
,例如:
var objResponse1 = JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);
慕森王
TA贡献1777条经验 获得超3个赞
如果一个人想支持泛型(在扩展方法中)这就是模式......
public static List<T> Deserialize<T>(this string SerializedJSONString){ var stuff = JsonConvert.DeserializeObject<List<T>>(SerializedJSONString); return stuff;}
它是这样使用的:
var rc = new MyHttpClient(URL);//This response is the JSON Array (see posts above)var response = rc.SendRequest();var data = response.Deserialize<MyClassType>();
MyClassType看起来像这样(必须匹配JSON数组的名称值对)
[JsonObject(MemberSerialization = MemberSerialization.OptIn)] public class MyClassType { [JsonProperty(PropertyName = "Id")] public string Id { get; set; } [JsonProperty(PropertyName = "Name")] public string Name { get; set; } [JsonProperty(PropertyName = "Description")] public string Description { get; set; } [JsonProperty(PropertyName = "Manager")] public string Manager { get; set; } [JsonProperty(PropertyName = "LastUpdate")] public DateTime LastUpdate { get; set; } }
使用NUGET下载Newtonsoft.Json在需要的地方添加引用...
using Newtonsoft.Json;
繁花不似锦
TA贡献1851条经验 获得超4个赞
无法在解决方案中添加注释,但这对我不起作用。对我有用的解决方案是使用:
var des = (MyClass)Newtonsoft.Json.JsonConvert.DeserializeObject(response, typeof(MyClass)); return des.data.Count.ToString();
添加回答
举报
0/150
提交
取消