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



我正在使用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[]数组属性中?

我需要编写一个自定义反序列化程序吗?

您是否可以控制API?你能换一下吗?在我看来,你获取这些项目的方式很奇怪。你获取的不是对象的集合,而是相同类型的单独对象。我的意思是,你的BO会像这样来映射你得到的:

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

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

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

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

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

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

虽然它本质上与自定义取消序列化程序相同,但您只需先将它放入一个非常通用的对象中,然后从那里开始,这比使用字符串要好:)

相关内容

  • 没有找到相关文章

最新更新