在接口开发的过程中经常通过接口获取数据返回是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. 管道过滤器模式(Pipe and Filter)与组合模式(修改)

    转自:http://haolloyin.blog.51cto.com/1177454/348277 之前在 benjielin 前辈的博客中看到“管道过滤器(Pipe-And-Filter)模式(ht ...

  2. ArcGIS Engine渲染

    符号化之Renderer( 渲染)体系 ArcGIS Engine9.3对GIS数据的符号化分为矢量数据渲染和栅格数据渲染两大类.接下来分别介绍FeatureRender和RasterRender. ...

  3. Windows 服务关闭自动重启

    此方法可以用来监控Windows Service是否运行良好 1.创建批处理程序,判断服务是否启动,若未启动则启动之 @echo off Rem Look for the Print Spooler ...

  4. 【解决】SharePoint Foundation 2013 未显示搜索框

    在正确安装 SharePoint Foundation 2013 后会发现页面中缺少搜索框. 经查询网页了解到这是一个Bug,而且在 SP1 中也没有修复,所以即便是安装了 SP1 补丁的系统也需要下 ...

  5. system verilog的一些总结(从其他博客复制来的)

    转载自 http://blog.sina.com.cn/s/blog_e7fec2630101f5t9.html SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 136 ...

  6. adb 命令集合

    1. adb shell 2. adb version 查看 adb 安装版本 3. adb start-server 启动服务 4. adb kill-server 杀死服务 5. adb get- ...

  7. Lucene.net 高亮显示搜索词

    网站搜索关键词,往往搜索的结果中,要把用户搜索的词突出显示出来,这就是高亮搜索词的含义.而lucene也恰恰支持这样的操作.在此,我用的是盘古的组件,代码如下: PanGu.HighLight.Sim ...

  8. Linux 用户和用户组管理

    Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助 ...

  9. PSP个人(观众界面)

    需求:作为一个观众,我希望了解某一场比赛的比分,以便了解赛况.(满意条件:精确到每一局的结果比分) 需求分析:实现查询数据库中每一局的分数并用界面显示. 生成设计文档: 运用三层架构,实现软件的基本功 ...

  10. I/O系统 (输入/输出)

    I/O系统 1:流: (1)判断到底是输入,还是输出:永远站在程序的立场上: (2)判断传递的到底是字节还是字符,从而决定管道的粗细: 字节管道可以传递所有数据,字符管道专门用来传递文本数据(1个字符 ...