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

             //实体序列化和反序列化
             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[;
             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\":\"石子儿\"}]");

             //匿名对象解析
             , 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(),方便快捷,对应代码如下:

  //匿名对象解析
             , 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学习笔记的更多相关文章

  1. JSON 学习笔记

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

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

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

  3. Json学习笔记

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

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

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

  5. Newtonsoft.Json(Json.Net)学习笔记

    Newtonsoft.Json 在Vs2013中就有自带的: 下面是Json序列化和反序列化的简单封装: /// <summary> /// Json帮助类 /// </summar ...

  6. Newtonsoft.Json(Json.Net)学习笔记-高级使用(转)

    1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称 7.动态决定属性是否序列化 8.枚举值的自定义格式化问题 9.自定义类型转换 10.全 ...

  7. Newtonsoft.Json(Json.Net)学习笔记(转)

    概述 Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库,通过Nuget获取.(查看原文) 下面是Json序列化和反序列化的简单封装: /// <summary&g ...

  8. Json.Net学习笔记

    http://www.cnblogs.com/xiaojinhe2/archive/2011/10/28/2227789.html Newtonsoft.Json(Json.Net)学习笔记 http ...

  9. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

随机推荐

  1. WinServer2008R2 + IIS 7.5 + .NET4.0 经典模式 运行WebAPI程序报404错误的解决方案

    在Windows Server 2008 R2系统下,IIS 7.5 + .NET Framework 4.0的运行环境,以经典模式(Classic Mode)部署一个用.NET 4.0编译的 Web ...

  2. WCF 的 Service Instance模式和并发处理

    WCF 的 Service Instance(实例)有三种模式 PerCall:每一次调用都创建一个实例,每一次调用结束后回收实例.此模式完全无状态. PerSession:调用者打开Channel时 ...

  3. Android开发自学笔记(Android Studio)—4.3ImageView及其子类

    一.引言 ImageView继承自View组件,主要功能用来显示图片,实际上他能显示的不仅是图片,Drawable对象都可以用ImageView来显示. ImageView派生了ImageButton ...

  4. 两个多项式相加 ( C++ )

    实现两个多项式进行相加 不开辟空间 ( 这要求实现进行相加,代价为两个原链表将被修改) 分析: this>other 就把other当前结点放置在this之前 this<other 就th ...

  5. win7和Ubuntu双系统折腾记

    哎,最近老是写些没涵养的博客.哥们问我怎么不分享点cv的论文思路,或者搞点深度学习调参的经验.因为真正跑深度学习搞 计算机视觉的时候,时间悄悄过去了,只有环境出Bug了,才是我最难受的时候,每一次搞好 ...

  6. Linux环境下段错误的产生原因及调试方法小结

    转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  7. JavaScript正则表达式小记

    RegExp.html div.oembedall-githubrepos{border:1px solid #DDD;border-radius:4px;list-style-type:none;m ...

  8. php操作memcache的使用【转】

    1.简介 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任意多个连接, ...

  9. getWindow().setFlags

    //设置窗体全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams ...

  10. Spark运行流程概述

    Application 指用户编写的Spark应用程序,其中包含了一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码. Driver Spark中的Driver即运行上述Ap ...