2016-06-01 8 views
0

Ich probiere den Facebook Messenger aus, send api. Von meinen Tests gibt es bisher zwei Antworten. Für Antwort 200, es ist so etwas wie:.NET: Wie man eine JSON Antwort unbekannter Struktur behandelt

{ 
    "recipient_id": "1730337993881234", 
    "message_id": "mid.1464765699033:1edf6d866bc6de1234" 
} 

Für eine 400-Antwort, ist es so etwas wie:

{ 
    "error": { 
     "message": "(#100) Invalid fbid.", 
     "type": "OAuthException", 
     "code": 100, 
     "fbtrace_id": "EjUIvT0HLph" 
      } 
} 

ich zwei Klassen erstellen können diese beiden Antworten übereinstimmen. Meine Tests sind jedoch nicht erschöpfend. Gibt es eine Möglichkeit, eine JSON-Antwort unbekannter Struktur in .NET zu behandeln, ohne sie als eine einfache Zeichenfolge zu behandeln?

+1

Haben Sie etwas in Richtung der Verwendung von 'dynamic' versucht? –

+0

wie versuchen Sie es im Moment zu handhaben? –

+0

@SimonPrice Ich erstelle zwei Klassen, die diesen beiden Strukturen entsprechen. –

Antwort

0

Wenn Sie sich die Antworten ansehen, die Sie aufgelistet haben, können Sie dies mit einer Klasse abbilden. Stellen Sie einfach sicher, dass Eigenschaften für recipient_id, message_id und eine Fehlereigenschaft vorhanden sind.

Auf diese Weise, wenn Sie eine Antwort erhalten, wenn es ein Fehler war, würde Ihre Fehlereigenschaft aufgefüllt werden, für die Sie testen können, und wenn nicht, würden die anderen Eigenschaften bevölkert werden, Fehler null zu verlassen.

Ich denke, dies könnte der einfachste Weg sein und vermeidet, sich mit der Erstellung von benutzerdefinierten Modellbinder für dynamische Objekte beschäftigen, vor allem, wenn die Struktur der Antworten bekannt ist!

bearbeiten

Ich habe gerade den Boten api ausgecheckt und es nur zurückgibt, in der Tat zwei Arten von responses so sollte mein Vorschlag die Arbeit machen.

0

Ich denke, dass es keine gute Idee ist, Apfel und Orangen wie Mo09890 zu mischen. Eine bessere Idee ist es, Ergebnisse anders zu parsen. Z.B. Im Falle eines Fehlers sollten Sie einen Hinweis darauf erhalten, dass ein Fehler aufgetreten ist. Anschließend können Sie mithilfe von JSON.NET eine spezielle Fehlerstruktur analysieren.

Ich benutze RestSharp und für jede Antwort, dass ich mich überprüfen, wenn es ein Fehler ist oder nicht, wie das ist:

if (response.StatusCode != HttpStatusCode.OK) 
{ 
    MyError result = JObject.Parse(response.Content) 
          .ToObject<MyError>(); 

    if (result.ErrorCode != null) 
    { 
     return result; 
    } 

    throw new ApplicationException($"Service error. StatusCode: {response.StatusCode}. Details: {response.Content}"); 
} 

Andernfalls, wenn Sie ganz einfach nicht die Struktur gibt es keine Möglichkeit Sie erstellen können in .NET. Sie müssen also entweder mit dem Ergebnis als generisches JSON-Objekt arbeiten, das Sie mit JSON.NET analysieren können, z. oder eine andere Bibliothek oder, wenn Ihr Client es unterstützt: dynamic Schlüsselwort:

JObject myObject = JObject.Parse(response.Content); 
Verwandte Themen