Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库(下载地址http://json.codeplex.com/)。

下面是Json序列化和反序列化的简单封装:

  1. /// <summary>
  2. /// Json帮助类
  3. /// </summary>
  4. public class JsonHelper
  5. {
  6. /// <summary>
  7. /// 将对象序列化为JSON格式
  8. /// </summary>
  9. /// <param name="o">对象</param>
  10. /// <returns>json字符串</returns>
  11. public static string SerializeObject(object o)
  12. {
  13. string json = JsonConvert.SerializeObject(o);
  14. return json;
  15. }
  16.  
  17. /// <summary>
  18. /// 解析JSON字符串生成对象实体
  19. /// </summary>
  20. /// <typeparam name="T">对象类型</typeparam>
  21. /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
  22. /// <returns>对象实体</returns>
  23. public static T DeserializeJsonToObject<T>(string json) where T : class
  24. {
  25. JsonSerializer serializer = new JsonSerializer();
  26. StringReader sr = new StringReader(json);
  27. object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
  28. T t = o as T;
  29. return t;
  30. }
  31.  
  32. /// <summary>
  33. /// 解析JSON数组生成对象实体集合
  34. /// </summary>
  35. /// <typeparam name="T">对象类型</typeparam>
  36. /// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
  37. /// <returns>对象实体集合</returns>
  38. public static List<T> DeserializeJsonToList<T>(string json) where T : class
  39. {
  40. JsonSerializer serializer = new JsonSerializer();
  41. StringReader sr = new StringReader(json);
  42. object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
  43. List<T> list = o as List<T>;
  44. return list;
  45. }
  46.  
  47. /// <summary>
  48. /// 反序列化JSON到给定的匿名对象.
  49. /// </summary>
  50. /// <typeparam name="T">匿名对象类型</typeparam>
  51. /// <param name="json">json字符串</param>
  52. /// <param name="anonymousTypeObject">匿名对象</param>
  53. /// <returns>匿名对象</returns>
  54. public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
  55. {
  56. T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
  57. return t;
  58. }
  59. }

为进一步理解Newtonsoft,写了一些测试的例子:

  1. /// <summary>
  2. /// Json测试
  3. /// </summary>
  4. public class JsonTest : IRun
  5. {
  6. public void Run()
  7. {
  8. Student sdudent = new Student();
  9. sdudent.ID = ;
  10. sdudent.Name = "陈晨";
  11. sdudent.NickName = "石子儿";
  12. sdudent.Class = new Class() { Name = "CS0216", ID = };
  13.  
  14. //实体序列化和反序列化
  15. string json1 = JsonHelper.SerializeObject(sdudent);
  16. //json1 : {"ID":1,"Name":"陈晨","NickName":"石子儿","Class":{"ID":216,"Name":"CS0216"}}
  17. Student sdudent1 = JsonHelper.DeserializeJsonToObject<Student>(json1);
  18.  
  19. //实体集合序列化和反序列化
  20. List<Student> sdudentList = new List<Student>() { sdudent, sdudent1 };
  21. string json2 = JsonHelper.SerializeObject(sdudentList);
  22. //json: [{"ID":1,"Name":"陈晨","NickName":"石子儿","Class":{"ID":216,"Name":"CS0216"}},{"ID":1,"Name":"陈晨","NickName":"石子儿","Class":{"ID":216,"Name":"CS0216"}}]
  23. List<Student> sdudentList2 = JsonHelper.DeserializeJsonToList<Student>(json2);
  24.  
  25. //DataTable序列化和反序列化
  26. DataTable dt = new DataTable();
  27. dt.TableName = "Student";
  28. dt.Columns.Add("ID", typeof(int));
  29. dt.Columns.Add("Name");
  30. dt.Columns.Add("NickName");
  31. DataRow dr = dt.NewRow();
  32. dr["ID"] = ;
  33. dr["Name"] = "战三";
  34. dr["NickName"] = "小三";
  35. dt.Rows.Add(dr);
  36. string json3 = JsonHelper.SerializeObject(dt);
  37. //json3 : [{"ID":112,"Name":"战三","NickName":"小三"}]
  38. DataTable sdudentDt3 = JsonHelper.DeserializeJsonToObject<DataTable>(json3);
  39. List<Student> sdudentList3 = JsonHelper.DeserializeJsonToList<Student>(json3);
  40.  
  41. //验证对象和数组
  42. Student sdudent4 = JsonHelper.DeserializeJsonToObject<Student>("{\"ID\":\"112\",\"Name\":\"石子儿\"}");
  43. List<Student> sdudentList4 = JsonHelper.DeserializeJsonToList<Student>("[{\"ID\":\"112\",\"Name\":\"石子儿\"}]");
  44.  
  45. //匿名对象解析
  46. var tempEntity = new { ID = , Name = string.Empty };
  47. string json5 = JsonHelper.SerializeObject(tempEntity);
  48. //json5 : {"ID":0,"Name":""}
  49. tempEntity = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"石子儿\"}", tempEntity);
  50. var tempStudent = new Student();
  51. tempStudent = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"石子儿\"}", tempStudent);
  52.  
  53. Console.Read();
  54. }
  55.  
  56. }
  57.  
  58. /// <summary>
  59. /// 学生信息实体
  60. /// </summary>
  61. public class Student
  62. {
  63. public int ID { get; set; }
  64. public string Name { get; set; }
  65. public string NickName { get; set; }
  66. public Class Class { get; set; }
  67. }
  68.  
  69. /// <summary>
  70. /// 学生班级实体
  71. /// </summary>
  72. public class Class
  73. {
  74. public int ID { get; set; }
  75. public string Name { get; set; }
  76. }

使用Json帮助类时,有两点需要注意下:

1. 通常使用调用实体序列化SerializeObject()和反序列化DeserializeJsonToObject()两个方法就可以了。但有些情况下我们解析json字符串时,可能没有对应的实体类型(或者说不想添加对应的实体类),这时候可以用匿名对象解析方法DeserializeAnonymousType(),方便快捷,对应代码如下:

  1. //匿名对象解析
  2. var tempEntity = new { ID = , Name = string.Empty };
  3. string json5 = JsonHelper.SerializeObject(tempEntity);
  4. //json5 : {"ID":0,"Name":""}
  5. tempEntity = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"石子儿\"}", tempEntity);
  6. Console.WriteLine(tempEntity.ID + ":" + tempEntity.Name);

2. Json的两种结构数组和对象解析时略有不同。Json对象一般转换成实体,Json数组一般转换成实体集合。代码如下:

  1. //验证对象和数组
  2. Student sdudent4 = JsonHelper.DeserializeJsonToObject<Student>("{\"ID\":\"112\",\"Name\":\"石子儿\"}");
  3. 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学习笔记的更多相关文章

  1. .NET C# Json序列化与反序列化——Newtonsoft.Json学习笔记

    Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库(介绍及下载地址:http://json.codeplex.com/). /// <summary>    ...

  2. JSON 学习笔记

    学习使用json过程随笔: json数组格式 var employees = [ { "firstName":"Bill" , "lastName&q ...

  3. JSON学习笔记一 —— 一些与移动端交互产生JSON数据的方法

    /**     * 测试的返回JSon方法,正式的不会用     * @author MrHandler     * @param reqCode     * @param joinStr     * ...

  4. Json学习笔记

    一.昨天内容回顾 创建ajax对象 a) 主流浏览器  new  XMLHttpRequest(); b) IE浏览器  new ActiveXObject("Msxml2.XMLHTTP. ...

  5. Ajax+JSON学习笔记(二)

    来源:http://www.imooc.com/learn/250 readyState属性 0:请求未初始化,open还没有调用 1:服务器连接已建立,open已经调用了 2:请求已接受,也就是接收 ...

  6. JSON学习笔记-5

    JSON.parse() 1.从服务器接受数据进行解析(一般是字符串) 2.解析前要确保你的数据是标准的 JSON 格式,否则会解析出错.可以使用线工具检测:https://c.runoob.com/ ...

  7. JSON学习笔记-4

    JSON 数组 1.访问数组 1.一次访问一个嵌套内容值var myObj, x; myObj = { "name":"网站", , "sites&q ...

  8. JSON学习笔记-3

    JSON 对象 1.对象语法 JSON 对象使用在大括号({})中书写. 对象可以包含多个 key/value(键/值)对. key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串 ...

  9. JSON学习笔记-2

    JSON的语法 1.JSON 数据的书写格式是:名称/值对. "name" : "我是一个菜鸟" 等价于这条 JavaScript 语句: name = &qu ...

随机推荐

  1. 转:设置session过期时间

    在Asp.net应用中,很多人会遇到Session过期设置有冲突.其中,可以有四处设置Session的过期时间: 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会 ...

  2. vim-airline的theme

    仓库位置: https://github.com/vim-airline/vim-airline-themes 这些内置的这些主题,可以直接使用,方法是在.vimrc中写 let g:airline_ ...

  3. 《more effective C++》条款10 防止构造函数里的资源泄露

    构造函数也可能发生内存泄露,考虑如下程序: class A { public: A(int *p) { if(p!=NULL) num=p; ); //do something } private: ...

  4. 用vs2008打开vs2012项目

    1 使用记事本打开*.sln解决方案文件,将Visual Studio 2012改为Visual Studio 2008 将版本号改为9.00 2 打开扩展名为*.csproj的项目文件,修改为 To ...

  5. Xcode编译异常和警告汇总(持续更新中)

    1.Method definition for 'xxx' not found xxx的方法没有实现 出现原因.h声明了xxx方法但是.m没有实现xxx方法 解决方法:在类的.m文件实现xxx方法   ...

  6. ajax 城市区域选择三级联动

    <body onLoad="sheng()"><div class="xqbody">    <form action=" ...

  7. TextView中的图文混排

    ImageSpan imageSpanMenu1 = new ImageSpan(activity,menuResId1); SpannableString contentMenu1 = new Sp ...

  8. JSP显示-下拉框

    <TABLE class="table-frame" id=p1 cellSpacing=0 cellPadding=0 width="99%" alig ...

  9. POJ 1966 Cable TV Network(顶点连通度的求解)

                               Cable TV Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissi ...

  10. PHP的一些要点

    1.用户评论的内容应当使用htmlspecialchars()函数进行过滤,如htmlspecialchars($_POST['content']);再写入数据库,防止用户评论中含有JS和HTML代码 ...