2016-06-01 8 views
0

私はFacebook Messengerの送信APIを試しています。私のテストから、これまでに2つの回答があります。応答200の場合、それはのようなものです:私はこれらの2つの応答を一致させるには、2つのクラスを作成することができます.NET:未知の構造のjson応答を処理する方法

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

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

400応答のために、それはのようなものです。しかし私のテストは網羅的ではありません。 .NETで未知の構造のjsonレスポンスを処理する方法はありますか?

+1

「ダイナミック」を使用する方向で何か試しましたか? –

+0

現時点でどのように処理しようとしていますか? –

+0

@SimonPrice私はこれらの2つの構造に合わせて2つのクラスを作成しています。 –

答えて

0

あなたがリストした回答を見ると、1つのクラスを使用してこれをマッピングできます。単にrecipient_id、message_id、およびerrorプロパティのプロパティがあることを確認してください。

このようにしてエラーが発生した場合はエラープロパティが入力され、テストすることができます。そうでない場合、他のプロパティにはnullが残されます。

これは最も簡単な方法かもしれないと思います。特に、応答の構造がわかっている場合は、動的オブジェクトのカスタムモデルバインダーを作成する必要がありません。

編集

私はちょうどメッセンジャーAPIをチェックアウトしたのだが、確かにだけので、私の提案は、仕事をする必要がありますresponsesの2種類を返すん。

0

私はMo09890のようにリンゴとオレンジを混ぜるのは良い考えではないと思います。より良い考え方は、結果を別々に解析することです。例えば。エラーが発生した場合は、エラーが発生したことを通知し、JSON.NETを使用して特殊なエラー構造を解析できます。

私はRestSharpを使用し、各応答のために私が得ることを私はそれがそのようなエラーやないかどうかを確認:あなたは完全にあなたが1を作成することができる方法はありません構造がわからない場合は、そうでない場合

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}"); 
} 

.NETで。したがって、結果をJSON.NETを使用して解析できる汎用JSONオブジェクトとして処理する必要があります。ダイナミックキーワード:

JObject myObject = JObject.Parse(response.Content); 
関連する問題