2016-10-27 54 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

谢谢。这有帮助 –