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);
if (result.resultData.classinfo!= null && result.resultData.classinfo.Count > )
{
List<classinfo> classinfos= result.resultData.classinfo;
}
[Serializable]
[DataContract]
public class result_Msg
{
/// <summary>
/// code
/// </summary>
[DataMember(IsRequired = false)]
public string resultCode { get; set; }
/// <summary>
/// msg
/// </summary>
[DataMember(IsRequired = false)]
public string resultMsg { get; set; }
/// <summary>
/// 数据集合
/// </summary>
[DataMember(IsRequired = false)]
public resultData resultData { get; set; }
}
[Serializable]
public class resultData
{
public List<classinfo> classinfo{ get; set; }
public List<otherinfo> otherinfo{ get; set; } }
方法二 :先解析成字典,获取到数据以后再次转换成json然后解析,思路是这个思路,如果遇到其他更加复杂的json也可以 按照这个思路去解析
//第一次解析
Dictionary<string, object> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
//获取具体数据部分
object obj = dic["resultData"];
//将数据部分再次转换为json字符串
string jsondata = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
//获取数据中的 不同类型的数据
Dictionary<string, object> dicc = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(jsondata); //chalssinfo
object objclass = dicc["classinfo"];
string jsonclass = Newtonsoft.Json.JsonConvert.SerializeObject(objclass);
DataTable tclass = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(jsonclass);
//otherinfo
object objother = dicc["otherinfo"];
string jsonother = Newtonsoft.Json.JsonConvert.SerializeObject(objother);
DataTable tother = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(jsonother); // tclass 和 tother 里面分别存放 classinfo和otherinfo 然后可以操作datatale 或者转成list也行
如果还有其他的方法请告知 谢谢!!
C# 解析json的更多相关文章
- Xamarin.Android下获取与解析JSON
一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选择添加引用,引用System.Json.dll 二.同步请求 既然是跨平台,我们自然不能按照java下的 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- 阶段一:通过网络请求,获得并解析JSON数据(天气应用)
“阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 在上一篇阶段一:解析JSON中提到,最近在写一个很简单的天气预报应用.即使功能很简单,但我还是想把它做成一个相对完 ...
- 阶段一:解析JSON
“阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 最近学到解析JSON格式的网络数据,而作业也要求自己找一个天气预报的API地址,然后解析其中JSON格式的数据.可 ...
- C语言创建及解析Json的使用法则
参考原文:http://blog.csdn.net/xukai871105/article/details/33013455 JSON(JavaScriptObject Notation)是一种轻量级 ...
- 不一样的dynamic解析json 万能方法
写过javascript的人都知道js解析json 1:(JSON) 字符串转换为对象. var str = '{"name":"lsw","hobb ...
- C# 解析JSON的几种办法
欲成为海洋大师,必知晓海中每一滴水的真名. 刚开始只是想找一个转换JSON数组的方法,结果在MSDN翻到一大把. 搜索过程中免不了碰到一大堆名词:WCF => DataContract => ...
- eval解析JSON中的注意点
在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery ...
- C#解析json文件的方法
C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的 ...
- WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)
DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...
随机推荐
- 【OpenCV】视频取坐标
今天实现了视频播放以后暂停获取鼠标点击处坐标的功能. #include <iostream> #include <opencv2/highgui/highgui.hpp> #i ...
- sqlalchemy
#!/usr/bin/env python #coding:utf8 from sqlalchemy import create_engine,and_,or_,func,Table from sql ...
- 在 Hibernate 中出现 database product name cannot be null 时怎么解决?
今 天在做一个SH项目结合的时候忽然出现了,这样的错误,我开始也不知道怎么办,便上网查,看一些高手回答都是说,检查 hibernate.cfg.xml 这个配置文件,或是一些其它的配置,于是我便看了一 ...
- 慕课网-Java入门第一季-7-2 Java 中无参无返回值方法的使用
来源:http://www.imooc.com/code/1578 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名 ...
- python多进程提高cpu利用率
cpu参数: 1个物理cpu,2个逻辑cpu(超线程),单核 具体 http://blog.csdn.net/dba_waterbin/article/details/8644626 物理CPU. ...
- linux mysql远程连接
今天在本地连接linux服务端的mysql始终报错61,谷歌后找到原因: linux的mysql默认是不允许远程连接操作的,在stack上面找到方法:修改mysql配置文件/usr/local/mys ...
- Oracle和SQLServer解锁杀进程
ORACLE:在平时工作中经常会遇到数据库死锁的情况,以前使用oracle时候(那时候还不懂),出现这种情况时前辈给了我一段命令:SELECT dob.OBJECT_NAME Table_Name,l ...
- RBAC在thinkphp中有Auth类 可以很好的实现权限控制
import('ORG.Util.Auth');//加载类库 $auth=new Auth(); if($auth->check('show_button',1)){// 第一个参数是规则名称, ...
- python 功能代码安全高效写法
一. with 链接地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/
- window10系统安装SQL数据库和小蝴蝶的问题
最近刚刚升了windows10系统.由于以前一直使用的是SQL2008数据库,所以也就没有下载最新的数据库,但是在安装的过程中一直提示让重启,重启了很多回也没有用. 在启动SQL2008安装程序的时候 ...