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. Windows平台下为Python添加MongoDB支持PyMongo

    到Python官网下载pymongo-2.6.3.win-amd64-py2.7.exe 安装pymongo-2.6.3.win-amd64-py2.7.exe 参照官方的用例进行测试 打开命令提示符 ...

  2. Javascript Promise入门

    是什么? https://www.promisejs.org/ What is a promise? The core idea behind promises is that a promise r ...

  3. Java面试题技术类一

    1.面向对象编程的三大特性是什么? (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继 ...

  4. Android Frameworks层介绍

    Activity Manager用来管理应用程序生命周期并提供常用的导航回退功能. Window Manager提供一些我们访问手机屏幕的方法.屏幕的透明度.亮度.背景. Content Provid ...

  5. cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西。

    cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西.

  6. php mysql_num_rows() 与 mysql_affected_rows()

    mysql_num_rows(data) 函数返回结果集中行的数目. data 结果集.该结果集从 mysql_query() 的调用中得到. 此命令仅对 SELECT 语句有效.要取得被 INSER ...

  7. 使用easyui时 进入一个新页面 前要经过一个页面混乱的时候 才到正常的页面去

    var width = $(window).width(); var height = $(window).height(); var html = "<div id='loading ...

  8. python chm 中文帮助 (2.7 和 3.4)

    sphinx-build 生成的(htmlhelp) 存在2个问题 1.生成的html 编码 cp2152,需要修改/sphinx/builders/html.py ctx['encoding'] = ...

  9. Code::Blocks生成的EXE文件执行错误解决:The program can&#39;t start because libgcc_s_dw2-1.dll is missing

    想用C++弄个简单东东,看有没有可行性, 开发软件,微软的太大太肿,就选用了Code::Blocks. 测试HELLO时,在工程环境中没问题的,但生成的EXE执行有问题, 报什么 libgcc_s_d ...

  10. Servlet,JDBC,JSONObject三者配和处理客户端请求并返回正确的json数据

    JSON简介 首先我们来理解json(JavaScript Object Notation),如果你熟悉python的字典结构和列表结构,其实json格式是非常容易理解的,当然不熟也不难理解,网上的资 ...