为了账号安全,请及时绑定邮箱和手机立即绑定

无法将JSON数组(例如[1,2,3])反序列化为类型''因为类型需要JSON对象

无法将JSON数组(例如[1,2,3])反序列化为类型''因为类型需要JSON对象

无法将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);


查看完整回答
反对 回复 2019-08-28
?
慕森王

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;


查看完整回答
反对 回复 2019-08-28
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

无法在解决方案中添加注释,但这对我不起作用。对我有用的解决方案是使用:

var des = (MyClass)Newtonsoft.Json.JsonConvert.DeserializeObject(response, typeof(MyClass)); return des.data.Count.ToString();


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 2828 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信