我正在使用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,这至少会给您一个可以循环并转换为列表的对象。
虽然它本质上与自定义取消序列化程序相同,但您只需先将它放入一个非常通用的对象中,然后从那里开始,这比使用字符串要好:)