使用RestSharp / JSON.NET反序列化自定义数组

4
我正在使用RestSharp / JSON.NET与API进行通信,该API返回像这样的集合:
{
    "count": 100,
    "0":
    {
        "title":"some title"
    },
    "1":
    {
        "title":"some title"
    },
    ....
}

不要按照通常的格式:

{
    "count": 100,
    "items":
    [
        {
            "title":"some title"
        },
        {
            "title":"some title"
        },
        ....
    ]
}

有没有一种简单的方法可以让RestSharp/JSON.NET正确解析第一个示例,即将其转换为我的反序列化对象上的Item[]数组属性?
我需要编写自定义反序列化器吗?
2个回答

0

该集合不遵循通常的JSON格式,因此需要某种JSON Net的覆盖。您可以编写一个JSON Net自定义转换器Custom Conveter,然后应该能够将其放入RestSharp中。

或者,您可以将整个对象作为JObject,这至少会给您一个可以循环遍历并转换为列表的对象。

虽然本质上与自定义反序列化器相同,但您首先要将其放入非常通用的对象中,然后再进行操作,这比使用字符串更好 :)


0

你对API有控制权吗?你能改变它吗?你获取项目的方式对我来说似乎非常奇怪。你没有获取对象集合,而是获取相同类型的单独对象。我的意思是,为了映射你所获取的内容,你的BO应该像这样:

    class YourBO
    {
        int count;
        YourProperty prop0;
        YourProperty prop1;
        ...
    }

与第二个示例中一样,不是获得一个属性集合:

    class YourBO
    {
        int count;
        IEnumerable<YourProperty> props;
    }

所以,除非你有一个有限且已知数量的项目,否则你得到的JSON的设计就没有意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接