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  

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

原文地址:https://www.cnblogs.com/kgdjgd/p/5896299.html