【问题标题】:Easiest way to parse JSON response解析 JSON 响应的最简单方法
【发布时间】:2016-03-06 17:34:26
【问题描述】:

有没有什么简单的方法可以在c#下面解析JSOn

{"type":"text","totalprice":"0.0045","totalgsm":"1","remaincredit":"44.92293","messages": [
{"status":"1","messageid":"234011120530636881","gsm":"923122699633"}
]}

如果有多个结果。

【问题讨论】:

标签: c# asp.net json


【解决方案1】:

按照以下步骤操作:

  1. 使用 json2csharp.com 将您的 JSON 转换为 C#;
  2. 创建一个类文件,把上面生成的代码放在那里;
  3. 使用 Nuget 包管理器将 Newtonsoft.Json 库添加到您的项目中;
  4. 使用此代码转换从您的服务接收到的 JSON:

     RootObject r = JsonConvert.DeserializeObject<RootObject>(json);
    

(请随意将RootObject 重命名为对您更有意义的名称。其他类应保持不变。)

【讨论】:

    【解决方案2】:

    您可以安全地使用内置的JavaScriptSerializer,而无需引用其他第三方库:

    var ser = new System.Web.Script.Serialization.JavaScriptSerializer();
    ser.DeserializeObject(json);
    

    【讨论】:

    • 这对我很有帮助。 DeserializeObject 返回一个 Dictionary 类型的对象。字典中的对象是字符串、对象数组或 Dictionary 的更多对象
    • IMO 如果您只是做一个简单的解析或者您根本不想使用第三方库,这就是您要走的路。
    【解决方案3】:

    我找到了一种无需使用任何外部 API 即可获得它的方法

            using (var w = new WebClient())
            {
                var json_data = string.Empty;
                string url = "YOUR URL";
                // attempt to download JSON data as a string
                try
                {
                    json_data = w.DownloadString(url);
                    JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
                    var result = jsSerializer.DeserializeObject(json_data);
                    Dictionary<string, object> obj2 = new Dictionary<string, object>();
                    obj2=(Dictionary<string,object>)(result);
    
                    string val=obj2["KEYNAME"].ToString();
                }
                catch (Exception) { }
                // if string with JSON data is not empty, deserialize it to class and return its instance 
            }
    

    【讨论】:

      【解决方案4】:

      对我来说...最简单的方法是使用 JSON.net 对代表对象的实体进行反序列化,例如:

      public class Message
      {
          public string status { get; set; }
          public string messageid { get; set; }
          public string gsm { get; set; }
      }
      
      public class YourRootEntity
      {
          public string type { get; set; }
          public string totalprice { get; set; }
          public string totalgsm { get; set; }
          public string remaincredit { get; set; }
          public List<Message> messages { get; set; }
      }
      

      然后这样做:

      YourRootEntity data JsonConvert.DeserializeObject<YourRootEntity>(jsonStrong);
      

      【讨论】:

      • 这行不通。 Message 属性具有 json 对象,而不是对象数组。 public List&lt;Message&gt; messages { get; set; } 不是必需的,简单的 public Message messages { get; set; } 就可以了。
      • 我只是用json2csharp创建它,写一个示例。
      猜你喜欢
      • 2015-01-29
      • 2011-08-22
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2019-05-09
      • 2018-09-09
      相关资源
      最近更新 更多