DataContractJsonSerializer在WP7上的表现如何?

时间:2012-04-09 14:44:17

标签: c# json windows-phone-7 deserialization

我正在处理一个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的图像字符串是一个单独的字符串(与数组/字符串列表相比),它会将它转换为只有一个成员的字符串列表吗?


最后,如果不是这种情况(我的理论是错误的),那么如何处理这种情况呢?

1 个答案:

答案 0 :(得分:0)

Kris,如果DataContractJsonSerializer期望一个数组或任何IEnumerable字符串,它实际上会期望以下格式:

[“str1”,“str2”,“str3”,...]

如果它只收到一个字符串,如下所示:

“STR1”

它实际上会抛出异常。它不会自动将其转换为数组,也无法实现。

但是,如果您将“Images”声明为System.Object类型,则可以采用一种解决方法。如果这样做,序列化将起作用。反序列化将完全按照您的需要运行 - 如果遇到数组,它将反序列化为字符串数组,如果遇到字符串,它将反序列化为System.string。