在接口开发的过程中经常通过接口获取数据返回是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. Shift的用法

    Shell编程中Shift的用法     位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的 ...

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

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

  3. OpenLayers 3 中Layers的相关知识

    昨天自己一遍又一遍的把API里Accessible map那个例子写下来,终于好像有熟悉一点点.找到一篇博文详细讲Layers的.整理一下贴出来(本来想在网上做笔记可以重新排版,比写在本子上要容易有结 ...

  4. Shell中取得文件的最后修改时间

    stat -c %y file 取得修改日期 -,-,-

  5. mysql日志与备份恢复

    一.mysql日志: mysql的日志种类有很多,常见的有二进制日志,一般查询日志,满查询日志,中继日志,事务日志等,具体信息可以通过 mysql> SHOW GLOBAL VARIABLES ...

  6. Nopcommerce 二次开发2 WEB

    using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel.Syndica ...

  7. Do things for others

    早上,按照平常的时间去吃早饭,食堂格外的空旷,打饭的员工说今天人很少,我说昨天是有元旦晚会,她说今天是放假,我后来想,还是她说的更有道理.她看的比我清楚更清楚! 幸亏昨晚上记录下了早上要帮别人搜论文的 ...

  8. ARToolKit for Unity环境搭建(初步搭建成功)

    最近一段时间才开始学习使用Unity3d,AR的学习使用中,先后使用了metaio SDK.vuforia SDK,但由于这两个都属于收费的,今天开始尝试使用ARToolKit.先将ARToolKit ...

  9. What is SPI?

    原文地址:http://www.fpga4fun.com/SPI1.html SPI is a simple interface that allows one chip to communicate ...

  10. Windows IIS 安装配置PHP环境

    一. 概述 二.安装PHP 1.到php官网下载最新版PHP http://windows.php.net/download 三.配置IIS PHP环境