本文出自地址: http://www.cnblogs.com/freshman0216/p/4161800.html#undefined

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; } }

View Code

为进一步理解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; } }

View Code

使用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":"陈晨"}]。\

本文出自地址: http://www.cnblogs.com/freshman0216/p/4161800.html#undefined

转载于:https://www.cnblogs.com/workcn/p/4389140.html

转载--文章(感谢陈晨博主分享) 关于 Json.net相关推荐

  1. JAVA猎才优秀博主分享

    文章目录 绪论 达内(TEDU)开源 达内JHT2207 优秀博主 达内JHT2208 优秀博主 达内JHT2209 优秀博主 绪论 自驱.自省.创多赢,共同打造我们自己的精英圈. 达内(TEDU)开 ...

  2. 【整理自官方公开资料】CSDN博主排名影响因素

    我们都知道旧的排名系统是根据积分排名的. 而根据CSDN官方的消息,新的积分系统是在原来积分制的基础上,加上文章的收藏,分享,点赞,评论等数据权重,形成一个新的博客总排名体系. 新排名系统参考的部分指 ...

  3. CSDN 博客的原理值排名规则(附:博主的成长历程)

    前言 CSDN 希望成为开发者学习,成长和成就的平台.所以,在2021年中旬左右推出了新的原力值排名规则.基于已经有的很多功能来支持开发者的职业成长,希望用原力 (以前也叫影响力,声望) 来体现用户的 ...

  4. python爬取微博指定内容_python3.5爬虫-爬取微博某博主微博内容

    想要爬取某个博主的微博数据.在网络上寻找了很多关于爬取微博内容的教程,发现有些教程比较老旧了,已经无法再用,有些教程在我这里出现一些问题,比如爬取移动端的微博需要获取登陆cookie,而我的谷歌浏览器 ...

  5. 小红书百万博主如何炼成?美妆博主专访

    "在小红书上如何快速涨粉?"是大家长期以来的疑惑,为此我们找到了小红书美妆博主小颠儿kini,让我们看看他在成为百万博主的道路上都总结了哪些心得吧! 采访手记:截止到发稿,美妆博主 ...

  6. 在CSDN设置“关注博主即可阅读全文”方法增加粉丝量超简单

    我们在平时CSDN上搜索文章,打开文章,需要关注博主方可继续阅读的,相必有人会很困惑,也有人会觉得很烦.一般选择先关注,看完取消关注,不管怎么说,今天我来教大家如何设置"关注博主即可阅读全文 ...

  7. CSDN 的各位新博主们,交个朋友吧~

    橡皮擦,一个逗趣的互联网高级网虫. 写博客久了,总是听到这样的声音:"擦姐,我也开始写博客了,但没有人关注,没有人访问,┭┮﹏┭┮ ",每次听到这些,都仿佛回到了多年前自己写博客之 ...

  8. 30天投放博主近100+,超越咖啡行业巨头品牌,三顿半有何营销妙计

    在今年刚过去不久的双十一大促中,毫不意外,天猫双 11"咖啡冲调"类目,三顿半再次成为国内咖啡品牌的佼佼者,即便是身为行业"大佬"的雀巢也落后于它. 熟悉三顿半 ...

  9. 博主日常工作中使用的shell脚本分享

    前言: 今天给大家分享一篇在我工作中常用的一个shell脚本,里面有一些我们常用到的shell操作.该脚本用于本地电脑和服务器交互上,实现以下功能: 自动拉取自己个人电脑上的源码到服务器上yocto包 ...

最新文章

  1. 为什么有人会觉得灵魂无处安放
  2. Servlet -- 重定向
  3. django按钮点击后想刷新当前页面的view写法
  4. 大一计算机课实训总结1000字,大一计算机实训报告.doc
  5. 【转】UML基础: 第1部分 - 类图 (Class Diagram)
  6. C++中size_type类型详解
  7. mysql的请求分发,基于 gorilla/mux 实现路由匹配和请求分发:服务单页面应用
  8. 【转】switch中case与default的情况
  9. 【Selenium2】【HTMLTestRunner】
  10. Sql server 密钥
  11. Android修行手册-EditText属性以及光标和小键盘控制
  12. MarkDown 符号大全
  13. bat批处理脚本获取window系统所有用户名并设置密码,禁用Guest账户
  14. 智能暖风机——FAQ
  15. 对于uniapp的项目,获取设备的一些设备id,首次登陆设备的首台绑定,以及对项目的版本号进行对比进行app升级
  16. Java初学01:学习路线,springcloud视频下载
  17. 【算法思想:回溯法】回溯算法入门级详解
  18. 【leetcode】2248. 多个数组求交集(js实现)
  19. 机器学习实战(一):Document clustering 文档聚类
  20. java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity异常的易被忽略的原因

热门文章

  1. MLDLRL:MLDL相关概念的原始英文解释——对理解最初的ML和DL的相关概念的定义非常有用
  2. 【报告分享】品牌营销数智化转型白皮书-阿里研究院群邑GroupM(附下载)
  3. Rocky Linux 8 安装 socks5 服务器步骤
  4. 基于matlab tcr fc 无功补偿,基于MATLAB的静止无功补偿器的仿真研究
  5. Amy-Tabb机器人世界手眼标定(2、实验结果)
  6. 六派玩家收割智能路由器
  7. 基于STM32超声波风速风向测量仪
  8. 贝叶斯统计学习笔记|Bayesian Statistics|Metropolis-Hastings与Gibbs Sampling
  9. 3个烟花代码,我已上传,也可复制代码
  10. 多edittext监听变化的优化