当前位置: 首页 > 知识库问答 >
问题:

无法将JSON数组(例如[1,2,3])反序列化为类型“”,因为类型需要JSON对象(例如{“name”:“value”})才能正确反序列化

田普松
2023-03-14

我有这个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"
    }
]

我有这些类:

public class RetrieveMultipleResponse
{
    public List<Attribute> Attributes { get; set; }
    public string Name { get; set; }
    public string Id { get; set; }
}

public class Value
{
    [JsonProperty("Value")]
    public string value { get; set; }
    public List<string> Values { get; set; }
}

public class Attribute
{
    public string Key { get; set; }
    public Value Value { get; set; }
}

我正在尝试使用下面的代码反序列化上面的JSON:

var objResponse1 = JsonConvert.DeserializeObject<RetrieveMultipleResponse>(JsonStr);

但我得到了这个错误:

无法将当前JSON数组(例如[1,2,3])反序列化为类型“Test.Model.RetrieveMultipleResponse”,因为该类型需要一个JSON对象(例如{“name”:“value”})才能正确反序列化.要修复此错误,可以将JSON更改为JSON对象(例如{“name”:“value”}),或者将反序列化类型更改为数组或实现集合接口(例如ICollection、IList)的类型,该集合接口可以从JSON数组反序列化。还可以将JsonArrayAttribute添加到类型中,以强制它从JSON数组反序列化。路径''',行1,位置1。

共有2个答案

巫英纵
2023-03-14

如果要支持泛型(在扩展方法中),这是一个模式...

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;
孙鑫鹏
2023-03-14

您的json字符串被包装在方括号内([]),因此它被解释为数组,而不是单个RetrieveMultipleResponse对象。因此,您需要将其反序列化为RetrieveMultipleResponse的类型集合,例如:

var objResponse1 = 
    JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);
 类似资料:
  • 我有这个JSON: 我有以下课程: 我正在尝试使用以下代码反序列化上述JSON: 但我得到了这个错误: 无法将当前JSON数组(例如[1,2,3])反序列化为类型“test.Model”。RetrieveMultipleResponse'因为该类型需要一个JSON对象(例如{“name”:“value”})才能正确反序列化。要修复此错误,请将JSON更改为JSON对象(例如{“name”:“val

  • 问题内容: 我有一堂这样的课。 我这样绝望。 我的输出在小提琴手上看起来像这样(字符串sc) 但是我收到错误消息:无法将当前的JSON数组(例如[1,2,3])反序列化为这些代码中的错误类型。 谢谢 。 问题答案: 看起来该字符串包含其中包含单个对象的数组。如果从输入的两端删除方括号,则应该能够将数据反序列化为单个对象: 您也可以将数组反序列化为对象列表,然后将对象从索引零处取出。

  • 问题内容: 我正在尝试将json数据反序列化为模型类,但是失败了。这是我的工作: 这是我的模型的样子: 您可以看到我到达这里的Json:http : //api.worldbank.org/incomeLevels/LIC/countries? format=json 这是我得到的错误: 无法将JSON数组反序列化为“ Mvc4AsyncSample.Models.CountryModel”类型。

  • 我有一个通过RabbitMQ作为消息发送的类,在sender服务上,它的定义如下: 并且在接收方服务上: 在receiver controller中,我有以下方法,它应该接受该消息,将其转换为一个对象,并将其保存在数据库中,看起来如下所示: 编辑:根据请求添加堆栈跟踪。

  • 问题背景: 我正在使用牛顿软件 JSON.NET 将 XML 响应从 AWS 服务解封为 C# 对象结构。 问题: 当我尝试反序列化 类属性时,我收到以下错误消息: 我应该补充一点,我无法控制返回的XML,反过来也无法控制我需要将响应反序列化为的大型对象结构。 代码: 以下是“ImageSet”的C#类模型 这是一个显示JSON响应的屏幕截图,突出显示了抛出错误的< code>Category属性

  • 问题内容: 我在反序列化一些json数据,获取InvalidCastExceptions之类的问题。 谁能指出我正确的方向? 这是我要反序列化的json; [{“ OrderId”:0,“名称”:“摘要”,“ MaxLen”:“ 200”},{“ OrderId”:1,“名称”:“详细信息”,“ MaxLen”:“ 0”}] 这是我的代码; 问题答案: OrderId是json中的一个Int(请注