2012-01-20 139 views
4

我使用RestSharp/JSON.NET去跟它返回一个像这样的集合的API:反序列化的自定义阵列RestSharp/JSON.NET

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

,而不是通常的格式:

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

是否有一种直接的方式让RestSharp/JSON.NET正确解析第一个示例,即将数据放入我的反序列化对象的Item []数组属性中?

我需要编写一个自定义的解串器吗?

回答

0

您是否有对API的控制权?你可以改变它吗?你得到这些物品的方式对我来说似乎很奇怪。你没有获得对象的集合,而是获得相同类型的单独对象。我的意思是,你的BO是这样的映射,你做了什么:

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

非但没有属性的集合,因为它会与你的第二个例子:

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

所以,除非你有一个有限的和已知数量的项目,你正在得到的JSON的设计没有意义

0

该集合不遵守通常的JSON格式,所以需要某种类型的JSON网络覆盖。你也许可以编写一个json net自定义转换器Custom Conveter,然后你就可以把它转换成RestSharp。

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

虽然它本质上是一个自定义的同样的事情,解串器,你只需把它变成一个非常通用的对象首先从那里走,比用绳子更好的工作:)