.NET中常用的几种解析JSON方法
一、基本概念
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方法
| 名称 | 类库 | 使用场景 | 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方法的更多相关文章
- iOS中常用的四种数据持久化方法简介
iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...
- python中常用的九种数据预处理方法分享
Spyder Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...
- JavaScript中常用的几种类型检测方法
javascript中类型检测方法有很多: typeof instanceof Object.prototype.toString constructor duck type 1.typeof 最常见 ...
- 【原】实时渲染中常用的几种Rendering Path
[原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...
- 【转载】Python编程中常用的12种基础知识总结
Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...
- Python编程中常用的12种基础知识总结
原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...
- 本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。
本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop.Storm以及Spark. 当前的高性能PC机.中型机等机器在处理海量数据时,其计算能力.内存容量等指标都远远无法达到要求.在大数 ...
- 开发中常用的几种 Content-Type
开发中常用的几种 Content-Type application/x-www-form-urlencoded 浏览器的原生 form 表单,如果不设置,那么最终就会以 application/x-w ...
- C#中常用的几种读取XML文件的方法
1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/
随机推荐
- IE下实现打印功能
先贴代码: <html> <head> <style type="text/css"> *{margin:0px;padding:0px;} . ...
- Java并发大师Brain Goetz和Doug Lea 的中英文博客文章地址
Java并发大师Brain Goetz和Doug Lea是Java并发方面最权威的人物,他的文章绝对是最具有参考价值的,值得仔仔细细的推敲和研究. Brain Goetz 中文地址:http://ww ...
- 《SQL Server企业级平台管理实践》读书笔记——当我们的备份都已经损坏的时候该怎么办
作为数据库管理员最最痛苦的莫过于,当数据库宕机的时候需要找备份,但在这个时候突然发现备份文件也是坏的,这就意味着数据会丢失,为此可能会丢掉职位,饭碗不保,所以为此,我们一定要保证好备份的完整性,一般发 ...
- 基于Cookie的SSO登录分析和实现
什么是SSO? 现在很多大的互联网公司都会有很多的应用,比如以下是淘宝网的截图: 天猫 聚划算 头条等都是不同的应用,有的甚至采用完全不同的域名,但是所有在淘宝注册的用户都是使用的一套用户名和口令,如 ...
- JS高级程序设计2nd部分知识要点2
ECMAScript中所有函数的参数都是按值传递的. 5种基本数据类型: Undfined,Null,Boolean,Number,String. 当代码在一个环境中执行时,会创建变量对象的一个作用域 ...
- httpclient访问网站时设置Accept-Encoding为gzip,deflate返回的结果为乱码的问题
近期迷恋上httpclient模拟各种网站登陆,浏览器中的开发者工具中查看请求头信息,然后照葫芦画瓢写到httpclient的请求中去,requestheader中有这么一段设置: Accept-En ...
- 记一次zookeeper集群搭建错误的排除
zookeeper官网上的文档说得很清楚. http://zookeeper.apache.org/doc/r3.5.1-alpha/zookeeperAdmin.html#sc_designing ...
- Hadoop Resource
http://www.aiopass4sure.com/cloudera-exams/ccd-410-exam-questions/which-process-describes-the-lifecy ...
- BendFord's law's Chi square test
http://www.siam.org/students/siuro/vol1issue1/S01009.pdf bendford'law e=log10(1+l/n) o=freq of first ...
- C自学笔记-递归与迭代的使用方法笔记与两者的使用场合
递归和迭代在刚开始学C语言的时候就学过,但是不知道怎么使用.今天遇到一个题目分析过后 我瞬间想起来之前学过递归的方法,做完题后顺便翻了翻书整理了这个笔记.题目大概是这样的. 题目:猴子吃桃问题:猴子第 ...