【问题标题】:Deserializing custom array with RestSharp / JSON.NET使用 RestSharp / JSON.NET 反序列化自定义数组
【发布时间】:2012-01-20 19:13:55
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net json.net restsharp


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      或者你可以把整个对象当作一个 JObject,它至少会给你一个可以循环并转换为列表的对象。

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

      【讨论】:

        猜你喜欢
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多