2016-10-27 53 views
1

我向Zoho支持端點發出獲取請求,並且此調用的結果可以是兩種不同的結構。要麼有錯誤的結果。這應該看起來像下面(如果搜索結果是沒有的話)。如何從httprequest中讀取Json結果

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

或者如果搜索結果有一個或多個要返回的對象。它看起來像:

{ 
"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. 錯誤:如果是這樣的運行方法A
  2. 如果有隻是一個記錄返回,然後運行方法B
  3. 如果有一個以上的記錄,然後運行方法C.

我不太確定哪個將是解析json和檢查內容的最佳方法

+0

您可以創建兩個C#類型:一爲結果和一個錯誤。首先嚐試反序列化結果。如果reult是NULL,則嘗試將其反序列化爲錯誤類型。我不確定是否正確理解你。 – kat1330

+0

@ kat1330:你讓我正確的,那正是我想到的。但沒有比創建多個類別更好的方法, –

回答

1

如果您創建類結構(如下面的結構類和結構中的結構類被刪除以縮短此示例) ,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; } 
} 

反序列化:

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

謝謝。這有幫助 –