4

我正在使用 RestSharp / JSON.NET 与返回如下集合的 API 对话:

{
    "count": 100,
    "0":
    {
        "title":"some title"
    },
    "1":
    {
        "title":"some title"
    },
    ....
}

而不是通常的格式:

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

有没有一种直接的方法可以让 RestSharp / JSON.NET 正确解析第一个示例,即进入我的反序列化对象的 Item[] 数组属性?

我需要编写自定义反序列化器吗?

4

2 回答 2

0

您可以控制 API 吗?你能改变它吗?你获得物品的方式对我来说似乎很奇怪。你得到的不是对象的集合,而是相同类型的不同对象。我的意思是你的 BO 看起来像这样来映射你得到的东西:

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

而不是像第二个示例那样获取属性集合:

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

因此,除非您拥有有限且已知数量的项目,否则您获得的 json 设计没有意义

于 2012-02-28T06:17:38.590 回答
0

该集合不遵循通常的 json 格式,因此需要对 json net 进行某种覆盖。您也许可以编写一个 json 网络自定义转换器Custom Conveter,然后您应该能够将其放入 RestSharp。

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

尽管它与自定义反序列化器本质上是一样的,但您只需先将其放入一个非常通用的对象并从那里开始,比使用字符串更好:)

于 2012-07-25T19:57:11.073 回答