在接口开发的过程中经常通过接口获取数据返回是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的更多相关文章

  1. Xamarin.Android下获取与解析JSON

    一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选择添加引用,引用System.Json.dll 二.同步请求 既然是跨平台,我们自然不能按照java下的 ...

  2. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  3. 阶段一:通过网络请求,获得并解析JSON数据(天气应用)

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 在上一篇阶段一:解析JSON中提到,最近在写一个很简单的天气预报应用.即使功能很简单,但我还是想把它做成一个相对完 ...

  4. 阶段一:解析JSON

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 最近学到解析JSON格式的网络数据,而作业也要求自己找一个天气预报的API地址,然后解析其中JSON格式的数据.可 ...

  5. C语言创建及解析Json的使用法则

    参考原文:http://blog.csdn.net/xukai871105/article/details/33013455 JSON(JavaScriptObject Notation)是一种轻量级 ...

  6. 不一样的dynamic解析json 万能方法

    写过javascript的人都知道js解析json 1:(JSON) 字符串转换为对象. var str = '{"name":"lsw","hobb ...

  7. C# 解析JSON的几种办法

    欲成为海洋大师,必知晓海中每一滴水的真名. 刚开始只是想找一个转换JSON数组的方法,结果在MSDN翻到一大把. 搜索过程中免不了碰到一大堆名词:WCF => DataContract => ...

  8. eval解析JSON中的注意点

       在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery ...

  9. C#解析json文件的方法

    C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的 ...

  10. WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)

    DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...

随机推荐

  1. Windows系统

    1. 更改XP登录界面 怎样启用XP的经典登录界面 第一步:用管理员账号登录系统. 第二步:运行gpedit.msc启动组策略编辑器,找到"计算机配置"--"管理模板&q ...

  2. [POJ3468] A Simple Problem with Integers (Treap)

    题目链接:http://poj.org/problem?id=3468 这题是线段树的题,拿来学习treap. 不旋转的treap. #include <cstdio> #include ...

  3. CentOS开机无法进入系统,如何查错

    开机时按e/F5按钮,进入选择系统界面 会出现 CentOS(2.6.32-...类似的选择列表,选择默认的系统然后按e: 这时会出现 root kernel ... initd... 三个选项,选择 ...

  4. Scale和Resolution的含义及转换算法

    当我们在用arcgis server 构建切片时,我们会发现在缓存生成的conf.xml中有这样的片段: 在上述片段中<LODInfo>代表了每一级切片的信息,<LevelID> ...

  5. 利用MyEclipse自动生成POJO和配置文件

    1.选择MyEclipse菜单的window菜单的Open Perspective,选择MyEclipse Database Explorer,如图所示. 2.在MySql上面点击右键,选择eidt. ...

  6. R语言 三个函数sort();rank();order()

    R语言入门,弄懂了几个简单的函数,分享一下:R语言排序有几个基本函数: sort():rank():order()sort()是对向量进行从小到大的排序rank()返回的是对向量中每个数值对应的秩or ...

  7. centos 解压jdk安装包方式安装jdk 出现 java/lang/NoClassDefFoundError: java/lang/Object 错误

    安装完JDK ,设定环境变量后出现这个错误: [root@localhost lib]# javacError occurred during initialization of VMjava/lan ...

  8. C#遍历集合与移除元素的方法

    如果用foreach,会造成被遍历的集合更改后带来异常问题. 此时,用for循环可有效的解决这个问题. for(int i=0;i<List.Count;i++) { if(条件是真) { Li ...

  9. Unity IOC简单认知

    看了不少IOC的文章.简单概念梳理下. 1.依赖,依赖倒置,控制反转(IOC),依赖注入 解释是仿照http://www.cnblogs.com/qqlin/archive/2012/10/09/27 ...

  10. MySQL之权限管理

    MySQL之权限管理 一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界.比如只允许你执行select操作, 那么你就不能执行update操作.只 ...