我正在处理一个REST服务,它根据给它的信息(它是一个搜索服务),返回带有字符串元素或字符串元素列表的元素。一个示例可能是搜索具有零个或多个图像的项目 - 保存为url-strings。我的model
包含以下属性来处理我的示例:
private List<string> _Images = new List<string>();
[DataMember(Name="images", IsRequired=false)]
public List<string> Images
{
get
{
return _Images;
}
set
{
_Images = value;
onPropertyChanged("Images");
}
}
示例JSON
包含多张图片:
{
"id": 24955,
"title": "Conan the Barbarian",
"duration": 105,
"hd": false,
"trailer": "800/BM_6305_800_tr.wmv",
"images": [
"http://website.com/images/conanthebar_1.jpg",
"http://website.com/images/conanthebar_2.jpg",
"http://website.com/images/conanthebar_3.jpg",
"http://website.com/images/conanthebar_4.jpg",
"http://website.com/images/conanthebar_5.jpg",
"http://website.com/images/conanthebar_6.jpg"
]
}
带有一张图片的示例JSON
:
{
"id": 24955,
"title": "Conan the Barbarian",
"duration": 105,
"hd": false,
"trailer": "800/BM_6305_800_tr.wmv",
"images": "http://website.com/images/conanthebar_6.jpg"
}
现在,我的问题是,当我使用DataContractJsonSerializer
时,如何处理?如果我传入的json的图像字符串是一个单独的字符串(与数组/字符串列表相比),它会将它转换为只有一个成员的字符串列表吗?
最后,如果不是这种情况(我的理论是错误的),那么如何处理这种情况呢?
答案 0 :(得分:0)
Kris,如果DataContractJsonSerializer期望一个数组或任何IEnumerable字符串,它实际上会期望以下格式:
[“str1”,“str2”,“str3”,...]
如果它只收到一个字符串,如下所示:
“STR1”
它实际上会抛出异常。它不会自动将其转换为数组,也无法实现。
但是,如果您将“Images”声明为System.Object类型,则可以采用一种解决方法。如果这样做,序列化将起作用。反序列化将完全按照您的需要运行 - 如果遇到数组,它将反序列化为字符串数组,如果遇到字符串,它将反序列化为System.string。