0

私は wp7 と wp8 で Windows phone 7.1 プロジェクト ターゲットに取り組んでいます。

C# を使用して REST API からデータを正常にフェッチしました。API は 1 つの json で応答しますが、2 つの構造になる可能性があります。1 つは正しい結果用で、もう 1 つはエラー メッセージ用です。それぞれがまったく異なる構造を持っています。

HTTPステータスはすべて同じです ---> 200

さらに逆シリアル化するために、それらを 2 つの C# クラスに変換します。

私が望むのは、それらを異なる方法で処理することですが、逆シリアル化には、json のターゲット C# クラスが必要です。しかし、API が応答する json のタイプをどのように知ることができますか? 私は自分の目でそれを理解できますが、C# コードはどのように理解できるのでしょうか。

私が考えたのは、try catchで処理することです。

try
{
  //Deserializing the correct result
}
catch ( Exception ex)
{
  //Deserializing the ERROR result
}

これを解決するためのより良い方法はありますか?

4

1 に答える 1

0

Alaa Masoud がコメントで述べたように、REST API メソッドがエラーとは異なる成功のステータス コードを返す場合 (通常、成功の場合は 200、エラーの場合は 4xx)、デシリアライズする前にそれを見て、使用するクラスを決定できます。これが最善の方法です。

メソッドがそれぞれのケースで同じステータス コードを返す場合は、他にもいくつか試してみることができます。

  1. 固定クラスに逆シリアル化する代わりに、Linq to Jsonを使用できます。つまり、 を使用JObject.Parse()してから、関心のあるプロパティを探して JSON をたどります。
  2. エラーと成功の両方の JSON 構造のプロパティを持つように固定クラスを定義NullValueHandlingし、デシリアライザーのオプションを に設定できますIgnore。これにより、デシリアライザーは、エラーをスローすることなく、JSON で値を見つけたプロパティを埋めることができます。次に、オブジェクトの成功値またはエラー値を簡単に確認できます。明らかに、このソリューションは「クリーン」ではありませんが、ピンチで機能する可能性があります。
于 2013-05-11T06:53:09.617 に答える