Newtonsoft.Json 在Vs2013中就有自带的:

下面是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 = 1;sdudent.Name = "陈晨";sdudent.NickName = "石子儿";sdudent.Class = new Class() { Name = "CS0216", ID = 0216 };//实体序列化和反序列化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"] = 112;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 = 0, 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 = 0, 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":"陈晨"}]。

转载于:https://www.cnblogs.com/xp1056/p/5510316.html

Newtonsoft.Json(Json.Net)学习笔记相关推荐

  1. Json.Net学习笔记

    Json.Net学习笔记 摘自:  http://www.verydemo.com/demo_c360_i45119.html 分类: 编程语言/ ASP.NET/ 文章 导读:string goog ...

  2. Javascript学习笔记8——用JSON做原型

    在Javascript学习笔记5--类和对象中,我简单地提到了利用JSON去构造一个对象.代码如下: <script type="text/javascript">va ...

  3. 爬虫学习笔记(三)——利用JSON爬取豆瓣热映的使用

    系列文章目录 爬虫学习笔记(一):requests基础用法之爬取各类主流网站1 爬虫学习笔记(二):requests基础用法之爬取各类主流网站2 文章目录 系列文章目录 前言 一.JSON是什么? 二 ...

  4. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(5):将爬虫爬取到的数据存储到TXT,Word,Excel,Json等文件中

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号[小众技术] ...

  5. Json解析方式(学习笔记)

    Json解析方式 前言 一.Json是什么? 简介 示例 Java与Json 二.Json解析方式 2.1 Gson 将对象转换为JSON字符串 将JSON字符串转换为对象 2.2 FastJson ...

  6. Python3.6学习笔记总结4:错误处理、写文件、JSON、进程、线程

    python书籍推荐 书名:Python编程 从入门到实践作者:[美]埃里克·马瑟斯(Eric,Matthes)京东购买地址:https://item.jd.com/11993134.html 分享m ...

  7. JavaWeb学习笔记——JSON详解

    本文是学习Java时所记录的学习笔记,本节记录了JSON的相关知识,需要掌握JSON的书写格式,懂得JSON与String类型的转换. 文章目录 JSON简介 什么是JSON? JSON语法规则 JS ...

  8. json解析对应的value为null_JSON 学习笔记第一天——初识

    1. 什么是JSON JSON 是 JavaScript Object Notation 简写,是一种轻量级的数据交换格式. JSON 是 JS 对象的字符串表示法,它使用纯文本表示一个 JS 对象的 ...

  9. JSON必知必会 学习笔记

    JSON必知必会 读书笔记 术语 可移植性 平台和系统间传输信息的兼容性. JSON JavaScript Object Notation 对象表示法.这里主要是对象表示法,是一种数据交换格式,比XM ...

最新文章

  1. Ubuntu 忘记root登录密码的解决办法
  2. 001-Spring Cloud Edgware.SR3 升级最新 Finchley.SR1,spring boot 1.5.9.RELEASE 升级2.0.4.RELEASE注意问题点...
  3. 为什么python打开pygame秒关闭后在运行_当我关闭Pygame时屏幕冻结
  4. 连接数据库时提示归档器失败 ORA-00257: archiver error
  5. Edit button clicked in offline mode
  6. nodejs进入mysql数据库_nodejs简单访问及操作mysql数据库的方法示例
  7. 微软虚拟学院MVA 字幕获取方法
  8. 整理最全的Java笔试题库之问答题篇-国企笔试题库
  9. 领导人怎样带领好团队
  10. proe常用c语言语句,带你轻松搞懂Proe条件语句
  11. 集体备课模板_幼儿园集体备课教案模板课件(19页)-原创力文档
  12. 数智经济转型下如何抢占文创发展新机遇?中国移动咪咕聚焦新一代年轻人需求
  13. ArcGIS之克里金插值教学
  14. 替换运动学插件TRAC-IK
  15. 【单片机】51单片机最小系统
  16. Java实现银行卡号校验
  17. UltraISO 9安装教程
  18. 外文翻译原文附在后面_外文翻译及外原文(参考格式).doc
  19. Ubuntu18.04 双屏显示 双显卡设置
  20. 找不到msvcp140.dll无法继续执行代码,要怎么去解决?

热门文章

  1. BT5下使用Armitage的一些问题
  2. 远程协助TeamView软件 轻松控制计算机
  3. PX4 - position_estimator_inav
  4. C语言--冒泡法实现
  5. ADS错误(Fatal)L6002U解决方法
  6. zzuli 2527: THE END IS COMING!!!!!(最小费用最大流)
  7. 记录之tensorflow和pytorch中的取范数归一化操作
  8. C++ STL deque容器添加和删除元素方法完全攻略
  9. y7000 intel nvidia 双显卡安装Ubuntu16.04
  10. android指定sqlite路径_Android:自定义Sqlite数据库路径