zoukankan      html  css  js  c++  java
  • C# 解析json

    在接口开发的过程中经常通过接口获取数据返回是json格式字符串。

    但是返回的字符串可能比较复杂,可能不止一种类型的数据。

    例如:

    {
        "resultCode": "0",
        "resultMsg": "查询成功!",
        "resultData": {
            "classinfo": [
                {
                    "classNo": "101",
                    "className": "小A"
               
                },
                {
                    "classNo": "101",
                    "className": "小B"
                },
             
            ],
            "otherinfo": [
                {
                    "otherNo": "1111",
                    "otherType": "A"            
                },
                {
                  
                    "otherNo": "222",
                    "otherType": "b",
                }
             ]
        }
    }
    

    如何解析呢剔除其他信息只获取具体数据呢?

    ps:使用JavaScriptSerializer 或者 Json.Net 都可以

     第一种方法我用的是JavaScriptSerializer 。

     第二种方法用的是 Json.Net 但是需要在NuGET里面添加该服务(推荐)或者上网下载dll文件引入。

    方法一: 直接按照 json的格式构建对象就可以直接解析了

    这样所有的返回数据就变成一个对象。

      JavaScriptSerializer jss = new JavaScriptSerializer();
     result_Msg result = jss.Deserialize<result_Msg>(json);
    1  
    2                     if (result.resultData.classinfo!= null && result.resultData.classinfo.Count > 0)
    3                     {
    4                       List<classinfo>  classinfos= result.resultData.classinfo;
    5                     }
     1     [Serializable]
     2     [DataContract]
     3     public class result_Msg
     4     {
     5         /// <summary>
     6         /// code
     7         /// </summary>
     8         [DataMember(IsRequired = false)]
     9         public string resultCode { get; set; }
    10         /// <summary>
    11         /// msg
    12         /// </summary>
    13         [DataMember(IsRequired = false)]
    14         public string resultMsg { get; set; }
    15         /// <summary>
    16         /// 数据集合
    17         /// </summary>
    18         [DataMember(IsRequired = false)]
    19         public resultData resultData { get; set; }
    20     }
    1  [Serializable]
    2     public class resultData
    3     {
    4         public List<classinfo> classinfo{ get; set; }
    5         public List<otherinfo> otherinfo{ get; set; }
    6       
    7     }

     方法二 :先解析成字典,获取到数据以后再次转换成json然后解析,思路是这个思路,如果遇到其他更加复杂的json也可以 按照这个思路去解析

     1             //第一次解析
     2             Dictionary<string, object> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
     3             //获取具体数据部分
     4             object obj = dic["resultData"];
     5             //将数据部分再次转换为json字符串
     6             string jsondata =  Newtonsoft.Json.JsonConvert.SerializeObject(obj);
     7             //获取数据中的  不同类型的数据   
     8             Dictionary<string, object> dicc = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(jsondata);
     9 
    10             //chalssinfo 
    11             object objclass = dicc["classinfo"];
    12             string jsonclass = Newtonsoft.Json.JsonConvert.SerializeObject(objclass);
    13             DataTable tclass = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(jsonclass);
    14             //otherinfo 
    15             object objother = dicc["otherinfo"];
    16             string jsonother = Newtonsoft.Json.JsonConvert.SerializeObject(objother);
    17             DataTable tother = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(jsonother);
    18 
    19 
    20            // tclass 和  tother 里面分别存放 classinfo和otherinfo  然后可以操作datatale 或者转成list也行
    21  

     如果还有其他的方法请告知 谢谢!!

  • 相关阅读:
    辗转相除法求最大公约数和最小公倍数
    KMEANS算法
    Extjs RadioGroup中Radio的切换
    B树、B树、B+树、B*树都是什么
    DBSCAN算法的java实现
    SQL 基础:Select语句,各种join,union用法
    Ubuntu 安装中文输入法 fcitx
    Salesforce 主要发展历史
    Pair Programming(结对编程)
    学习笔记 设计模式之装饰者模式
  • 原文地址:https://www.cnblogs.com/kgdjgd/p/5896299.html
Copyright © 2011-2022 走看看