一、基本概念

json是什么?

JSON:JavaScript 对象表示法(JavaScript Object Notation)。

JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法。类似 XML。

JSON 比 XML 更小、更快,更易解析。

序列化和反序列化是怎么回事?

序列化: 将数据结构或对象转换成二进制串的过程

反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程

如何:对 JSON 数据进行序列化和反序列化?

1、定义 Person 的数据协定

通过将 DataContractAttribute 附加到类并将 DataMemberAttribute 特性附加到要序列化的成员,为Person定义数据协定。

[DataContract]
internal class Person
{
[DataMember]
internal string name; [DataMember]
internal int age;
}

2、将 Person 类型的实例序列化为 JSON

3、从 JSON 反序列化 Person 类型的实例 

更多参考:

https://msdn.microsoft.com/zh-cn/library/bb412179.aspx

https://msdn.microsoft.com/zh-cn/library/bb412170.aspx

二、.NET中常用的几种解析JSON方法

.NET中常用的几种解析JSON方法比较 
名称 类库 使用场景 linq支持
System.Runtime.Serialization.Json DataContractJsonSerializer 全部 No
System.Web.Script.Serialization JavaScriptSerializer web No
System.Json JsonArray、JsonObject、JsonValue Silverlight Yes
Newtonsoft.Json JsonConvert、JArray、JObject、JValue 全部 Yes

1、DataContractJsonSerializer

.NET Framwork3.5自带的System.Runtime.Serialization.Json可很好的完成JSON的解析,不需要使用第三方库。

添加引用System.Runtime.Serialization,然后使用 using System.Runtime.Serialization.Json;

相应的序列化的类,注意下面类加的Attribute,比如:

    /// <summary>
/// 异常对象
/// </summary>
[DataContract]
internal class Ex
{
[DataMember]
public string HelpLink { get; set; }
[DataMember]
public int HResult { get; set; } [DataMember]
public string Message { get; set; } [DataMember]
public string Source { get; set; } [DataMember]
public string StackTrace { get; set; } }

json帮助类

/// <summary>
/// json 帮助类
/// </summary>
internal class JsonHelper
{
//JSON字符串转对象
public static T JsonToT<T>(string json)
{
var ser = new DataContractJsonSerializer(typeof(T));
var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
stream.Position = ;
return (T)ser.ReadObject(stream);
} //对象转化为JSON字符串
public static string TtoJson<T>(T obj)
{
var ser = new DataContractJsonSerializer(typeof(T));
var stream = new MemoryStream();
ser.WriteObject(stream, obj);
var db = new byte[stream.Length];
stream.Position = ;
stream.Read(db, , (int)stream.Length);
var dataString = Encoding.UTF8.GetString(db);
return dataString;
} }

使用:

 var t = JsonHelper.jsonToT<T>(jsonstr);
var jsonstr=JsonHelper.TtoJson<T>(T);

更多内容请参考:https://msdn.microsoft.com/zh-cn/library/bb907644.aspx

2、JavaScriptSerializer

using System.Web.Script.Serialization;

var jsSerializer   = new JavaScriptSerializer();
var json= jsSerializer.Serialize(T);
var T = jsSerializer.Deserialize<T>(json);

更多请参考:http://msdn.microsoft.com/zh-cn/library/bb359469.aspx

3、System.Json

// using System.Json

    var css = "{ \"#header\" : {background:\"red\"}, layout : [5,4,1],color:\"cyan\" }";

    var style = JsonObject.Parse(css) as JsonObject;    

    (
from s in style
where s.Key == "color"
select (string)s.Value
).First().ToString();
// "cyan" // 更多操作
style["layout"][] = ; var hd = style["#header"];
style["body>div+p"] = hd;
style.Remove("#header"); var bd = new JsonObject();
bd["border"] = "1px solid cyan";
style["body>div+p"]["#meta"] = bd;
style.ToString();
// {"layout":[22,4,1],"color":"cyan","body>div+p":{"background":"red","#meta":{"border":"1px solid cyan"}}}

更多请参考:http://msdn.microsoft.com/zh-cn/library/cc626400%28v=VS.95%29.aspx

4、JSON.NET

json帮助类

public class JsonHelper
{
/// <summary>
/// 对象转换为JSON字符串
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public static string ObjectToJson(object item)
{
string res = JsonConvert.SerializeObject(item);
return res;
}
/// <summary>
/// JSON转换为对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonString"></param>
/// <returns></returns>
public static T JsonToObject<T>(string jsonString)
{
T res = JsonConvert.DeserializeObject<T>(jsonString);
return res;
}
}

更多请参考:http://www.newtonsoft.com/json/help/html/Introduction.htm

.NET中常用的几种解析JSON方法的更多相关文章

  1. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

  2. python中常用的九种数据预处理方法分享

    Spyder   Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...

  3. JavaScript中常用的几种类型检测方法

    javascript中类型检测方法有很多: typeof instanceof Object.prototype.toString constructor duck type 1.typeof 最常见 ...

  4. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  5. 【转载】Python编程中常用的12种基础知识总结

    Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  6. Python编程中常用的12种基础知识总结

    原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...

  7. 本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。

    本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop.Storm以及Spark. 当前的高性能PC机.中型机等机器在处理海量数据时,其计算能力.内存容量等指标都远远无法达到要求.在大数 ...

  8. 开发中常用的几种 Content-Type

    开发中常用的几种 Content-Type application/x-www-form-urlencoded 浏览器的原生 form 表单,如果不设置,那么最终就会以 application/x-w ...

  9. C#中常用的几种读取XML文件的方法

    1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/

随机推荐

  1. 命令行方式使用abator.jar生成ibatis相关代码和sql语句xml文件

    最近接手一个老项目,使用的是数据库是sql server 2008,框架是springmvc + spring + ibatis,老项目是使用abator插件生成的相关代码,现在需要增加新功能,要添加 ...

  2. Tip和菜单的实现方式

    Tip和菜单有类似的功能,即鼠标光标移上去的时候显示指定元素,鼠标光标离开的时候隐藏该元素.如下 示例1:下拉菜单(鼠标移动到“客户服务”上时出现,离开则隐藏) 示例2:水平菜单(鼠标移动到“餐饮美食 ...

  3. 虚拟机centos6.5 --设置主机名

    vi /etc/sysconfig/network #修改HOSTNAME后面的值,机器名 vi /etc/hosts #设置ip和机器名的对应关系 192.168.12.232 master 192 ...

  4. uniq

    -c, --count 在每行前加上表示相应行目出现次数的前缀编号-d, --repeated 只输出重复的行-D, --all-repeated[=delimit-method 显示所有重复的行de ...

  5. shell script 学习笔记-----shell变量

    1.在赋值语句name=value中不能存在空格,例如:name = value这样的形式会被认为是三个变量,因为本质上来说,脚本的内容就是传给shell程序的变量,而变量之间是通过空格区分的.如果想 ...

  6. java获取Json和http状态码

    最近再做接口自动化测试,其中有几个方法比较重要 1.获取http状态码 /* * 返回接口状态码 * */ public static String getHttpCode(String url) { ...

  7. 【问题&解决】试用版SQL Server 2008 R2 提示评估期已过,数据库不能访问解决办法

    因为以前一直是试用版,重启服务器之后,突然数据库不能访问,提示评估期已过,都快吓死了.还好找到了解决办法特copy解决步骤如下: (笔者用的是企业版: R88PF-GMCFT-KM2KR-4R7GB- ...

  8. Dev C++支持c++11标准的编译方法

    一开始学C++的时候老师推荐的就是Dev C++这个IDE,用起来感觉还不错,使用起来比较简单,而且属于比较轻量级的,不怎么占用内存:缺点可能就是调试功能没有项VS那种大型IDE齐全和好用,不过对于一 ...

  9. HDU 3584 Cube --三维树状数组

    题意:给一个三维数组n*n*n,初始都为0,每次有两个操作: 1. 翻转(x1,y1,z1) -> (x2,y2,z2) 0. 查询A[x][y][z] (A为该数组) 解法:树状数组维护操作次 ...

  10. HDU 4865 Peter's Hobby --概率DP

    题意:第i天的天气会一定概率地影响第i+1天的天气,也会一定概率地影响这一天的湿度.概率在表中给出.给出n天的湿度,推测概率最大的这n天的天气. 分析:这是引自机器学习中隐马尔科夫模型的入门模型,其实 ...