0

提供された情報(検索サービス)に応じて、文字列要素または文字列要素のリストのいずれかを含む要素を返すRESTサービスを扱っています。たとえば、画像が0個以上あるアイテムを検索する場合があります-url-stringsとして保存されます。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"
    ]
}

1つの画像のサンプル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つしかない文字列のリストに変換されますか?


最後に、これが当てはまらない場合(私の理論は誤りです)、そのような状況はどのように処理できますか?

4

1 に答える 1

0

Kris、DataContractJsonSerializerが配列または文字列のIEnumerableを期待している場合、実際には次の形式の何かを期待します。

["str1"、 "str2"、 "str3"、...]

以下のように、文字列のみを受信する場合:

「str1」

実際には例外がスローされます。これを自動的に配列に変換することはなく、変換する方法もありません。

ただし、回避策の1つは、「Images」をSystem.Object型として宣言する場合です。これを行うと、シリアル化は同じように機能します。デシリアライズは希望どおりに機能します。配列に遭遇すると文字列の配列にデシリアライズし、文字列に遭遇するとSystem.stringにデシリアライズします。

于 2012-04-26T19:57:29.237 に答える