无法将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位。


料青山看我应如是
浏览 2840回答 3
3回答

米琪卡哇伊

您的json字符串包含在方括号([])中,因此它被解释为数组而不是单个RetrieveMultipleResponse对象。因此,您需要将其反序列化为类型集合RetrieveMultipleResponse,例如:var&nbsp;objResponse1&nbsp;=&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);

慕森王

如果一个人想支持泛型(在扩展方法中)这就是模式......public&nbsp;&nbsp;static&nbsp;List<T>&nbsp;Deserialize<T>(this&nbsp;string&nbsp;SerializedJSONString){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;stuff&nbsp;=&nbsp;JsonConvert.DeserializeObject<List<T>>(SerializedJSONString); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;stuff;}它是这样使用的:var&nbsp;rc&nbsp;=&nbsp;new&nbsp;MyHttpClient(URL);//This&nbsp;response&nbsp;is&nbsp;the&nbsp;JSON&nbsp;Array&nbsp;(see&nbsp;posts&nbsp;above)var&nbsp;response&nbsp;=&nbsp;rc.SendRequest();var&nbsp;data&nbsp;=&nbsp;response.Deserialize<MyClassType>();MyClassType看起来像这样(必须匹配JSON数组的名称值对)[JsonObject(MemberSerialization&nbsp;=&nbsp;MemberSerialization.OptIn)] &nbsp;public&nbsp;class&nbsp;MyClassType &nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;[JsonProperty(PropertyName&nbsp;=&nbsp;"Id")] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Id&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;[JsonProperty(PropertyName&nbsp;=&nbsp;"Name")] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Name&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;[JsonProperty(PropertyName&nbsp;=&nbsp;"Description")] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Description&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;[JsonProperty(PropertyName&nbsp;=&nbsp;"Manager")] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Manager&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;[JsonProperty(PropertyName&nbsp;=&nbsp;"LastUpdate")] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DateTime&nbsp;LastUpdate&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;}使用NUGET下载Newtonsoft.Json在需要的地方添加引用...using&nbsp;Newtonsoft.Json;

繁花不似锦

无法在解决方案中添加注释,但这对我不起作用。对我有用的解决方案是使用:var&nbsp;des&nbsp;=&nbsp;(MyClass)Newtonsoft.Json.JsonConvert.DeserializeObject(response,&nbsp;typeof(MyClass));&nbsp;return&nbsp;des.data.Count.ToString();
打开App,查看更多内容
随时随地看视频慕课网APP