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

无法将当前JSON对象反序列化为泛型List类型

裴劲
2023-03-14

问题背景:

我正在使用牛顿软件 JSON.NET 将 XML 响应从 AWS 服务解封为 C# 对象结构。

问题:

当我尝试反序列化 ImageSet类别属性时,我收到以下错误消息:

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[ShoppingComparisonEngine.AWS.AWSRootListPriceObject.ImageSet]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.

Path 'Items.Item[1].ImageSets.ImageSet.Category', line 1, position 12122.

我应该补充一点,我无法控制返回的XML,反过来也无法控制我需要将响应反序列化为的大型对象结构。

代码:

var awsPriceLostModel = JsonConvert.DeserializeObject<AwsListPriceRootObject>(fullyEscapedData); 

以下是“ImageSet”的C#类模型

public class ImageSets
{
    [JsonProperty("imageset")]
    public List<ImageSet> ImageSet { get; set; }
}

public class ImageSet
{
    [JsonProperty("category")]
    public string Category { get; set; }
    [JsonProperty("swatchimage")]
    public SwatchImage SwatchImage { get; set; }
    [JsonProperty("smallimage")]
    public SmallImage2 SmallImage { get; set; }
    [JsonProperty("thumbnailimage")]
    public ThumbnailImage ThumbnailImage { get; set; }
    [JsonProperty("tinyimage")]
    public TinyImage TinyImage { get; set; }
    [JsonProperty("mediumimage")]
    public MediumImage2 MediumImage { get; set; }
    [JsonProperty("largeimage")]
    public LargeImage2 LargeImage { get; set; }
}

这是一个显示JSON响应的屏幕截图,突出显示了抛出错误的< code>Category属性:

任何试图弄清楚为什么在将列表从JSON解压缩到C#时出现错误的帮助都将不胜感激。

共有1个答案

冯阳云
2023-03-14

我不确定您的原始JSON是什么样的,但我会尝试以下两种方法之一:

>

  • 在ImageSet属性上使用[JsonArray]属性(docs)。

    [JsonArray]
    public List<ImageSet> ImageSet { get; set; }
    

    考虑为您的ImageSet属性使用不同的名称,或者它要序列化的名称。您已经在ImageSet名称上加倍,使用它表示类的名称以及包含该类列表的属性。

    祝你好运。

  •  类似资料:
    • 这是一个重复问题,因为下面的问题要么乱七八糟,要么根本没有回答: Jackson永远无法处理泛型类型T,它认为它是JavaType的映射,但它会发现对象类型构造函数参数,因为类型擦除并抛出错误。这是杰克逊的错误,还是我做错了什么?TypeReference或JavaType的显式规范还用于什么?

    • 我想通过Google Gson传输一个列表对象,但我不知道如何反序列化泛型类型。 我在看了这个之后尝试了什么(Balusc的回答): 编辑: 现在我有 但是,我确实在“FromJson”行得到以下异常: null

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

    • 是否有一种简单的方法来反序列化可以是或

    • 问题内容: 我在使用AJAX访问的Java服务器应用程序中有一个字符串。它看起来像以下内容: 当从服务器提取字符串时,是否有一种简单的方法可以将其转换为活动的JavaScript对象(或数组)?还是我必须手动拆分字符串并手动构建对象? 问题答案: 现代浏览器支持。 在不浏览器,您可以包括在库中。

    • 我有以下控制器: 使用以下请求对象: 当帖子通过并查看我得到的对象时,有效负载列表中有LinkedHashMap对象,而不是我的DTO类型的对象。 如何让Spring jackson将JSON转换为我的DTO对象。请记住,我计划对其他对象列表重用包装器响应DTO,这就是我使用通用列表(List)的原因。 这是我正在尝试的JSON。