Deserialisieren von JSON, wenn manchmal Array und manchmal Objekt

Bin ich mit ein bisschen Mühe Deserialisieren von Daten zurückgegeben, die von Facebook über die JSON.NET Bibliotheken.

JSON zurückgegeben ist, nur aus einer einfachen Wand ein post aussieht:

{
    "attachment":{"description":""},
    "permalink":"http://www.facebook.com/permalink.php?story_fbid=123456789"
}

JSON zurückgegeben für ein Foto aussieht:

"attachment":{
        "media":[
            {
                "href":"http://www.facebook.com/photo.php?fbid=12345",
                "alt":"",
                "type":"photo",
                "src":"http://photos-b.ak.fbcdn.net/hphotos-ak-ash1/12345_s.jpg",
                "photo":{"aid":"1234","pid":"1234","fbid":"1234","owner":"1234","index":"12","width":"720","height":"482"}}
        ],

Klappt alles Super und ich habe keine Probleme. Ich habe jetzt über eine einfache Wand-post von einem mobilen client mit dem folgenden JSON-und Deserialisierung jetzt schlägt dies mit einem einzigen post:

"attachment":
    {
        "media":{},
        "name":"",
        "caption":"",
        "description":"",
        "properties":{},
        "icon":"http://www.facebook.com/images/icons/mobile_app.gif",
        "fb_object_type":""
    },
"permalink":"http://www.facebook.com/1234"

Hier ist die Klasse, ich bin Deserialisieren:

public class FacebookAttachment
    {
        public string Name { get; set; }
        public string Description { get; set; }
        public string Href { get; set; }
        public FacebookPostType Fb_Object_Type { get; set; }
        public string Fb_Object_Id { get; set; }

        [JsonConverter(typeof(FacebookMediaJsonConverter))]
        public List<FacebookMedia> { get; set; }

        public string Permalink { get; set; }
    }

Ohne die FacebookMediaJsonConverter, bekomme ich eine Fehlermeldung: kann Nicht deserialisiert werden JSON-Objekt in den Typ " System.Sammlungen.Generisches.List`1[FacebookMedia]'.
was Sinn macht, da in der JSON -, Medien -, ist nicht eine Sammlung.

Ich fand dieser Beitrag beschreibt ein ähnliches problem, also habe ich versucht, diesen Weg gehen: JSON Deserialisieren, manchmal Wert ist ein array, manchmal "" (leere Zeichenfolge)

Mein converter sieht so aus:

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
     if (reader.TokenType == JsonToken.StartArray)
          return serializer.Deserialize<List<FacebookMedia>>(reader);
     else
          return null;
}

Welche gut funktioniert, außer ich bekomme jetzt eine neue Ausnahme:

Innen JsonSerializerInternalReader.cs, CreateValueInternal(): Unexpected token beim Deserialisieren Objekt: PropertyName

Den Wert der Leser.Der Wert "permalink". Ich kann deutlich sehen, in die Schalter, dass es kein Fall für JsonToken.PropertyName.

Gibt es etwas, was ich tun müssen, anders in meinem converter? Vielen Dank für jede Hilfe.

InformationsquelleAutor der Frage mfanto | 2011-03-07

Schreibe einen Kommentar