0

我正在处理一个 REST 服务,它根据提供给它的信息(它是一个搜索服务)返回带有字符串元素或字符串元素列表的元素。一个示例可能是搜索具有零个或多个图像的项目 - 保存为 url 字符串。Mymodel包含以下属性来处理我的示例:

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


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

4

1 回答 1

0

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

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

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

“str1”

它实际上会引发异常。它不会自动将其转换为数组,也没有办法。

但是,您拥有的一种解决方法是,如果您将“图像”声明为 System.Object 类型。如果你这样做,序列化将同样工作。反序列化将完全按照您的要求工作 - 如果遇到数组,它将反序列化为字符串数组,如果遇到字符串,它将反序列化为 System.string。

于 2012-04-26T19:57:29.237 回答