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

时间:2012-01-20 19:13:56

标签: asp.net json.net restsharp

我正在使用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 :(得分:0)

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

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

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

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

因此,除非你有一个有限和已知数量的项目,你得到的json的设计没有意义

答案 1 :(得分:0)

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

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

虽然它与自定义反序列化器本质上是一样的,但是你首先将它变成一个非常通用的对象并从那里开始,比使用字符串更好:)