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

    test tile package com.journaldev.spring.controller; import java.text.DateFormat; import java.util.Da ...

  2. CM给hive添加自定义jar包

    使用的是cloudera manager管理的集群: hive添加自定义jar包 服务端:高级:Hive 辅助 JAR 目录 设置的的路径是影响所有服务端的设置,比如hue中使用到了hive查询编辑器 ...

  3. Oracle Hang分析--转载

    1. 数据库hang的几种可能性 oracle 死锁 或者系统负载非常高比如cpu使用或其他一些锁等待很高都可能导致系统hang住,比如大量的DX锁. 通常来说,我们所指的系统hang住,是指应用无响 ...

  4. 通过WMI接口监控服务器性能

    WMI 是微软操作系统的一个内置的组件,通过使用WMI我们可以获取服务器硬件信息.收集服务器性能数据.操作Windows服务,甚至可以远程关机或是重启服务器. 一.在C#编程中使用WMI 要想在C#程 ...

  5. (转)Silverlight 与 JS交互

    转自 http://www.cnblogs.com/wt616/archive/2011/10/08/2201987.html 1.Silverlight直接调用JS的函数: 这个很简单,只要在HTM ...

  6. Win10光驱不见了

    1. 网上教程试了很多,如下: http://jingyan.baidu.com/article/02027811656a8b1bcd9ce570.html http://jingyan.todgo. ...

  7. 简单的java socket 示例

    一.搭建服务器端 a).创建ServerSocket对象绑定监听端口. b).通过accept()方法监听客户端的请求. c).建立连接后,通过输入输出流读取客户端发送的请求信息. d).通过输出流向 ...

  8. This kind of launch is configured to open the Debug perspective when it suspends.

    This kind of launch is configured to open the Debug perspective when it suspends. 因为设置了断点才会弹出这个,不需要调 ...

  9. 网页手机wap2.0网页的head里加入下面这条元标签......

    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放. <meta name="viewport" conten ...

  10. Xenko基础API笔记2-手势

    交互: Drag Gesture Type : Continuous Configuration class: GestureConfigDrag Event class: GestureEventD ...