我正在使用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 []数组属性?
我是否需要编写自定义反序列化程序?
答案 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,这至少会为您提供一个可以循环并转换为列表的对象。
虽然它与自定义反序列化器本质上是一样的,但是你首先将它变成一个非常通用的对象并从那里开始,比使用字符串更好:)