2012-04-09 9 views
0

Ich habe es mit einem REST-Service zu tun, der abhängig von den ihm gegebenen Informationen (es ist ein Suchdienst) Elemente mit String-Elementen oder einer Liste von String-Elementen zurückgibt. Ein Beispiel könnte die Suche nach einem Objekt sein, das null oder mehr Bilder enthält - gespeichert als URL-Strings. Mein model die folgende Eigenschaft enthält mit meinem Beispiel behandeln:Wie verhält sich DataContractJsonSerializer auf WP7?

private List<string> _Images = new List<string>(); 
[DataMember(Name="images", IsRequired=false)] 
public List<string> Images 
{ 
    get 
    { 
     return _Images; 
    } 
    set 
    { 
     _Images = value; 
     onPropertyChanged("Images"); 
    } 
} 

Probe JSON mit mehreren Bildern:

{ 
    "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" 
    ] 
} 

Probe JSON mit einem Bild:

{ 
    "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" 
} 

Nun, meine Frage ist, , wenn ich DataContractJsonSerializer verwende, wie wird das gehandhabt? Wenn die Bildzeichenfolge meines eingehenden JSON eine einzelne Zeichenfolge (im Vergleich zu einem Array/einer Liste von Zeichenfolgen) ist, wird sie dann in eine Liste von Zeichenfolgen mit nur einem Element konvertiert?

Schließlich, wenn dies NICHT der Fall ist (meine Theorie ist falsch), wie könnte eine solche Situation behandelt werden?

+0

Haben Sie ein Beispiel JSON, um Ihre Frage zu illustrieren? –

Antwort

0

Kris, wenn DataContractJsonSerializer ein Array oder eine IEnumerable von Strings erwartet, wird es tatsächlich etwas in folgendem Format erwarten:

[ "str1", "str2", "str3", ...]

Wenn es nur einen String erhält, wie unten:

"str1"

es tatsächlich eine Ausnahme werfen. Es wird nicht automatisch in ein Array konvertiert, und es gibt keinen Weg dazu.

Eine Problemumgehung haben Sie jedoch, wenn Sie "Bilder" vom Typ System.Object deklarieren. Wenn Sie dies tun, funktioniert die Serialisierung gleich. Die Deserialisierung wird genau so funktionieren, wie Sie es wollen - sie wird zu einem Array von Strings deserialisiert, wenn ein Array gefunden wird, und zu einem System.string deserialisiert, wenn sie auf einen String trifft.

Verwandte Themen