2016-10-27 4 views
1

私はZohoサポートエンドポイントにリクエストを行い、この呼び出しの結果は2つの異なる構造になる可能性があります。エラーの結果。以下のようになります(検索結果がnoneの場合)。httprequestからJsonの結果を読み取る方法

{ 
"response": { 
    "uri": "/api/json/accounts/getrecordsbysearch", 
    "error": { 
     "code": 4832, 
     "message": "There is no data to show" 
    } 
    } 
} 

または検索結果に1つ以上の返されるオブジェクトがある場合。 次

{ 
"response": { 
"result": { 
    "Accounts": { 
    "row": { 
     "no": "1", 
     "fl": [ 
     { 
      "val": "ACCOUNTID", 
      "content": "8046200" 
     }, 
     { 
      "val": "URI", 
      "content": "/support/" 
     }, 
     { 
      "val": "IsCommented", 
      "content": "false" 
     }, 
     { 
      "val": "Username", 
      "content": "Outdoo" 
     } 
     ] 
    } 
    } 
}, 
"uri": "/api/json/accounts/getrecordsbysearch" 
} 
} 

は何私が結果を解析するための最良の方法だろう、と実行します:それは次のようになり

  1. エラー:そう
  2. かの方法Aを実行している場合があります複数のレコードがある場合に返すだけのレコード、その後、方法B
  3. を実行され、その後、実行方法C.

jsonを解析して内容をチェックするのに最適な方法はどれですか?

+0

。最初に結果をデシリアライズしてみてください。 reultがNULLの場合、エラータイプとして逆シリアル化を試みます。私はあなたを正しく理解していませんでした。 – kat1330

+0

@ kat1330:あなたは私を正しくつかんだし、まさに私が心に留めていたものだ。しかし、複数のクラスを作成するより良い方法はありません –

答えて

1

以下のようなクラス構造を作成した場合(Resultクラスとその下のクラスを削除してこの例を短くした場合) json文字列は常に直列化解除され、エラークラスに値があるかどうかを確認できます。

public class Error 
{ 
    public int code { get; set; } 
    public string message { get; set; } 
} 

public class Response 
{ 
    public Result result { get; set; } 
    public string uri { get; set; } 
    public Error error { get; set; } 
} 

public class RootObject 
{ 
    public Response response { get; set; } 
} 

デシリアライズ:結果用とエラー用1:あなたは2つのC#タイプを作成することができます

var o = new JavaScriptSerializer().Deserialize<RootObject>(json); 
+0

ありがとうございます。それが役に立った –

関連する問題