【问题标题】:How to read Json result back from httprequest如何从 httprequest 读取 Json 结果
【发布时间】:2016-10-27 04:26:41
【问题描述】:

我向 Zoho 支持端点发出 get 请求,此调用的结果可以是两种不同的结构。要么是有错误的结果。应该如下所示(如果没有搜索结果)。

{
 "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 和检查内容的最佳方法

【问题讨论】:

  • 您可以创建两种 C# 类型:一种用于结果,一种用于错误。首先尝试反序列化结果。如果 reult 为 NULL ,则尝试反序列化为错误类型。不确定我是否理解正确。
  • @kat1330 :你说得对,这也正是我的想法。但是没有比创建多个类更好的方法吗

标签: c# asp.net json json.net


【解决方案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);

【讨论】:

  • 谢谢。这有帮助
猜你喜欢
  • 2018-04-05
  • 2014-06-12
  • 2014-03-13
  • 1970-01-01
  • 2020-08-13
  • 2021-11-26
  • 1970-01-01
  • 2014-10-13
  • 2012-04-10
相关资源
最近更新 更多