Newtonsoft.Json学习笔记
Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库(下载地址http://json.codeplex.com/)。
下面是Json序列化和反序列化的简单封装:
- /// <summary>
- /// Json帮助类
- /// </summary>
- public class JsonHelper
- {
- /// <summary>
- /// 将对象序列化为JSON格式
- /// </summary>
- /// <param name="o">对象</param>
- /// <returns>json字符串</returns>
- public static string SerializeObject(object o)
- {
- string json = JsonConvert.SerializeObject(o);
- return json;
- }
- /// <summary>
- /// 解析JSON字符串生成对象实体
- /// </summary>
- /// <typeparam name="T">对象类型</typeparam>
- /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
- /// <returns>对象实体</returns>
- public static T DeserializeJsonToObject<T>(string json) where T : class
- {
- JsonSerializer serializer = new JsonSerializer();
- StringReader sr = new StringReader(json);
- object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
- T t = o as T;
- return t;
- }
- /// <summary>
- /// 解析JSON数组生成对象实体集合
- /// </summary>
- /// <typeparam name="T">对象类型</typeparam>
- /// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
- /// <returns>对象实体集合</returns>
- public static List<T> DeserializeJsonToList<T>(string json) where T : class
- {
- JsonSerializer serializer = new JsonSerializer();
- StringReader sr = new StringReader(json);
- object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
- List<T> list = o as List<T>;
- return list;
- }
- /// <summary>
- /// 反序列化JSON到给定的匿名对象.
- /// </summary>
- /// <typeparam name="T">匿名对象类型</typeparam>
- /// <param name="json">json字符串</param>
- /// <param name="anonymousTypeObject">匿名对象</param>
- /// <returns>匿名对象</returns>
- public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
- {
- T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
- return t;
- }
- }
为进一步理解Newtonsoft,写了一些测试的例子:
- /// <summary>
- /// Json测试
- /// </summary>
- public class JsonTest : IRun
- {
- public void Run()
- {
- Student sdudent = new Student();
- sdudent.ID = ;
- sdudent.Name = "陈晨";
- sdudent.NickName = "石子儿";
- sdudent.Class = new Class() { Name = "CS0216", ID = };
- //实体序列化和反序列化
- string json1 = JsonHelper.SerializeObject(sdudent);
- //json1 : {"ID":1,"Name":"陈晨","NickName":"石子儿","Class":{"ID":216,"Name":"CS0216"}}
- Student sdudent1 = JsonHelper.DeserializeJsonToObject<Student>(json1);
- //实体集合序列化和反序列化
- List<Student> sdudentList = new List<Student>() { sdudent, sdudent1 };
- string json2 = JsonHelper.SerializeObject(sdudentList);
- //json: [{"ID":1,"Name":"陈晨","NickName":"石子儿","Class":{"ID":216,"Name":"CS0216"}},{"ID":1,"Name":"陈晨","NickName":"石子儿","Class":{"ID":216,"Name":"CS0216"}}]
- List<Student> sdudentList2 = JsonHelper.DeserializeJsonToList<Student>(json2);
- //DataTable序列化和反序列化
- DataTable dt = new DataTable();
- dt.TableName = "Student";
- dt.Columns.Add("ID", typeof(int));
- dt.Columns.Add("Name");
- dt.Columns.Add("NickName");
- DataRow dr = dt.NewRow();
- dr["ID"] = ;
- dr["Name"] = "战三";
- dr["NickName"] = "小三";
- dt.Rows.Add(dr);
- string json3 = JsonHelper.SerializeObject(dt);
- //json3 : [{"ID":112,"Name":"战三","NickName":"小三"}]
- DataTable sdudentDt3 = JsonHelper.DeserializeJsonToObject<DataTable>(json3);
- List<Student> sdudentList3 = JsonHelper.DeserializeJsonToList<Student>(json3);
- //验证对象和数组
- Student sdudent4 = JsonHelper.DeserializeJsonToObject<Student>("{\"ID\":\"112\",\"Name\":\"石子儿\"}");
- List<Student> sdudentList4 = JsonHelper.DeserializeJsonToList<Student>("[{\"ID\":\"112\",\"Name\":\"石子儿\"}]");
- //匿名对象解析
- var tempEntity = new { ID = , Name = string.Empty };
- string json5 = JsonHelper.SerializeObject(tempEntity);
- //json5 : {"ID":0,"Name":""}
- tempEntity = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"石子儿\"}", tempEntity);
- var tempStudent = new Student();
- tempStudent = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"石子儿\"}", tempStudent);
- Console.Read();
- }
- }
- /// <summary>
- /// 学生信息实体
- /// </summary>
- public class Student
- {
- public int ID { get; set; }
- public string Name { get; set; }
- public string NickName { get; set; }
- public Class Class { get; set; }
- }
- /// <summary>
- /// 学生班级实体
- /// </summary>
- public class Class
- {
- public int ID { get; set; }
- public string Name { get; set; }
- }
使用Json帮助类时,有两点需要注意下:
1. 通常使用调用实体序列化SerializeObject()和反序列化DeserializeJsonToObject()两个方法就可以了。但有些情况下我们解析json字符串时,可能没有对应的实体类型(或者说不想添加对应的实体类),这时候可以用匿名对象解析方法DeserializeAnonymousType(),方便快捷,对应代码如下:
- //匿名对象解析
- var tempEntity = new { ID = , Name = string.Empty };
- string json5 = JsonHelper.SerializeObject(tempEntity);
- //json5 : {"ID":0,"Name":""}
- tempEntity = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"石子儿\"}", tempEntity);
- Console.WriteLine(tempEntity.ID + ":" + tempEntity.Name);
2. Json的两种结构数组和对象解析时略有不同。Json对象一般转换成实体,Json数组一般转换成实体集合。代码如下:
- //验证对象和数组
- Student sdudent4 = JsonHelper.DeserializeJsonToObject<Student>("{\"ID\":\"112\",\"Name\":\"石子儿\"}");
- List<Student> sdudentList4 = JsonHelper.DeserializeJsonToList<Student>("[{\"ID\":\"112\",\"Name\":\"石子儿\"}]");
简单解释下Json对象和数组的含义:
对象是以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间运用 “,”(逗号)分隔。名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:{"ID":"112","Name":"石子儿"}。
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。例如:[{"ID":"112","Name":"石子儿"},{"ID":"113","Name":"陈晨"}]。
备注: //JavaScriptArray---> JArray
//JavaScriptConvert--->JsonConvert
//JavaScriptObject--->JObject
资源下载:Json90r1
Newtonsoft.Json学习笔记的更多相关文章
- .NET C# Json序列化与反序列化——Newtonsoft.Json学习笔记
Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库(介绍及下载地址:http://json.codeplex.com/). /// <summary> ...
- JSON 学习笔记
学习使用json过程随笔: json数组格式 var employees = [ { "firstName":"Bill" , "lastName&q ...
- JSON学习笔记一 —— 一些与移动端交互产生JSON数据的方法
/** * 测试的返回JSon方法,正式的不会用 * @author MrHandler * @param reqCode * @param joinStr * ...
- Json学习笔记
一.昨天内容回顾 创建ajax对象 a) 主流浏览器 new XMLHttpRequest(); b) IE浏览器 new ActiveXObject("Msxml2.XMLHTTP. ...
- Ajax+JSON学习笔记(二)
来源:http://www.imooc.com/learn/250 readyState属性 0:请求未初始化,open还没有调用 1:服务器连接已建立,open已经调用了 2:请求已接受,也就是接收 ...
- JSON学习笔记-5
JSON.parse() 1.从服务器接受数据进行解析(一般是字符串) 2.解析前要确保你的数据是标准的 JSON 格式,否则会解析出错.可以使用线工具检测:https://c.runoob.com/ ...
- JSON学习笔记-4
JSON 数组 1.访问数组 1.一次访问一个嵌套内容值var myObj, x; myObj = { "name":"网站", , "sites&q ...
- JSON学习笔记-3
JSON 对象 1.对象语法 JSON 对象使用在大括号({})中书写. 对象可以包含多个 key/value(键/值)对. key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串 ...
- JSON学习笔记-2
JSON的语法 1.JSON 数据的书写格式是:名称/值对. "name" : "我是一个菜鸟" 等价于这条 JavaScript 语句: name = &qu ...
随机推荐
- 转:设置session过期时间
在Asp.net应用中,很多人会遇到Session过期设置有冲突.其中,可以有四处设置Session的过期时间: 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会 ...
- vim-airline的theme
仓库位置: https://github.com/vim-airline/vim-airline-themes 这些内置的这些主题,可以直接使用,方法是在.vimrc中写 let g:airline_ ...
- 《more effective C++》条款10 防止构造函数里的资源泄露
构造函数也可能发生内存泄露,考虑如下程序: class A { public: A(int *p) { if(p!=NULL) num=p; ); //do something } private: ...
- 用vs2008打开vs2012项目
1 使用记事本打开*.sln解决方案文件,将Visual Studio 2012改为Visual Studio 2008 将版本号改为9.00 2 打开扩展名为*.csproj的项目文件,修改为 To ...
- Xcode编译异常和警告汇总(持续更新中)
1.Method definition for 'xxx' not found xxx的方法没有实现 出现原因.h声明了xxx方法但是.m没有实现xxx方法 解决方法:在类的.m文件实现xxx方法 ...
- ajax 城市区域选择三级联动
<body onLoad="sheng()"><div class="xqbody"> <form action=" ...
- TextView中的图文混排
ImageSpan imageSpanMenu1 = new ImageSpan(activity,menuResId1); SpannableString contentMenu1 = new Sp ...
- JSP显示-下拉框
<TABLE class="table-frame" id=p1 cellSpacing=0 cellPadding=0 width="99%" alig ...
- POJ 1966 Cable TV Network(顶点连通度的求解)
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- PHP的一些要点
1.用户评论的内容应当使用htmlspecialchars()函数进行过滤,如htmlspecialchars($_POST['content']);再写入数据库,防止用户评论中含有JS和HTML代码 ...