本系列教程假设读者已经对Json有一定的了解,关于Json在这里不多说.本系列教程希望能对读者开发涉及到Json的.Net项目有一定的帮助.本系列教程是根据官方文档资料和自己项目应用汇总而成.如果觉得本系列对你有用,望多多关注.本人还只是个未毕业的学生,水平有限,尽请指正.

一.Json.Net有什么用?

  Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换.

  Json.Net目前的版本是4.5 下载

二.为什么要用Json.Net?

  我们知道在.Net中内置了读写Json的对象(DataContractJsonSerializer,JavaScriptSerializer),为什么我们还要用Json.Net呢?
  功能对比: 

特性 Json.Net DataContractJsonSerializer JavaScriptSerializer
Json 支持 支持 支持
Bson 支持 不支持 不支持
Json Schema 支持 不支持 不支持
.Net 2.0 支持 不支持 不支持
.Net 3.5 支持 支持 支持
.Net 4.0 支持 支持 支持
Silverlight 支持 支持 不支持
Windows Phone 支持 支持 不支持
Windows 8 Metro 支持 支持 不支持
Linq to Json 支持 不支持 不支持
Indented Json(有换行格式的Json) 支持 不支持 不支持
Json和XML转换 支持 不支持 不支持
序列化DataTable和DataSet 支持 不支持 不支持
序列化Entity Framework 支持 不支持 不支持

 性能对比:

三.实例

下面通过一个实例来展示它在项目的应用.下面的例子是通过Ajax和Json显示所有用户的列表信息.
准备: 创建一个Web项目,本应用程序是通过VS2010创建的.并添加引用Newtonsoft.Json.dll

1.首先创建一个Person对象

  1. /// <summary>
  2. /// 包含用户的基本信息
  3. /// </summary>
  4. public class Person
  5. {
  6. /// <summary>
  7. /// 获取或设置用户名
  8. /// </summary>
  9. public string Name { get; set; }
  10.  
  11. /// <summary>
  12. /// 获取或设置用户年龄
  13. /// </summary>
  14. public int Age { get; set; }
  15.  
  16. /// <summary>
  17. /// 获取或设置用户性别
  18. /// </summary>
  19. public string Gender { get; set; }
  20.  
  21. /// <summary>
  22. /// 获取或设置用户国籍
  23. /// </summary>
  24. public string Country { get; set; }
  25.  
  26. /// <summary>
  27. /// 获取或设置用户电子邮箱
  28. /// </summary>
  29. public string Email { get; set; }
  30. }

2.创建用户操作类PersonRepository,用来对Person的操作,本例中仅仅用来获取Person对象列表

  1. /// <summary>
  2. /// 用户操作类
  3. /// </summary>
  4. public class PersonRepository
  5. {
  6. /// <summary>
  7. /// 获取用户列表
  8. /// </summary>
  9. /// <returns>所有用户信息</returns>
  10. public static List<Person> GetPersons()
  11. {
  12. List<Person> ps = new List<Person>();
  13. Person p1 = new Person { Name = "Tom", Age = , Country = "US", Gender = "Male", Email = "tom@gmail.com" };
  14. Person p2 = new Person { Name = "Jack", Age = , Country = "UK", Gender = "Male", Email = "jack@gmail.com" };
  15. Person p3 = new Person { Name = "Eden", Age = , Country = "Canada", Gender = "Female", Email = "eden@gmail.com" };
  16. Person p4 = new Person { Name = "Li Hua", Age = , Country = "China", Gender = "Male", Email = "lihui@163.com" };
  17. Person p5 = new Person { Name = "Lvo", Age = , Country = "US", Gender = "Male", Email = "lvo@gmail.com" };
  18. ps.Add(p1);
  19. ps.Add(p2);
  20. ps.Add(p3);
  21. ps.Add(p4);
  22. ps.Add(p5);
  23. return ps;
  24. }
  25. }

3.添加一个一般处理程序,我将其命名为PersonHandler.ashx,引入命名空间"using Newtonsoft.Json",修改ProcessRequest函数中的代码如下:

通过Json.Net来序列化对象,可以通过

string json = JsonConvert.SerializeObject(Object obj);

还可以通过JsonSerializer来实现

  1. JsonSerializer serializer = new JsonSerializer();
  2. StringBuilder sb = new StringBuilder();
  3. StringWriter sw = new StringWriter(sb);
  4. JsonWriter writer = new JsonTextWriter(sw);
  5. serializer.Serialize(writer, persons);
  6. string json = sb.ToString();

这两种方式有什么联系和区别呢?
实际上,JsonConvert.SerializerObject内部就是通过JsonSerializer来实现的.

  1. public static string SerializeObject(object value, Formatting formatting, JsonSerializerSettings settings)
  2. {
  3. JsonSerializer jsonSerializer = JsonSerializer.Create(settings);
  4. StringBuilder sb = new StringBuilder(0x100);
  5. StringWriter sw = new StringWriter(sb, CultureInfo.InvariantCulture);
  6. using (JsonTextWriter jsonWriter = new JsonTextWriter(sw))
  7. {
  8. jsonWriter.Formatting = formatting;
  9. jsonSerializer.Serialize(jsonWriter, value);
  10. }
  11. return sw.ToString();
  12. }

区别在于JsonSerializer序列化时,你可以选择用JsonWriter也可以选择TextWriter.而JsonConvert只是默认使用JsonTextWriter.

4.添加一个Html网页,网页的内容仅仅用来显示用户的基本信息

  1. <div>
  2. <table border="">
  3. <thead>
  4. <tr>
  5. <td>
  6. 用户名
  7. </td>
  8. <td>
  9. 年龄
  10. </td>
  11. <td>
  12. 性别
  13. </td>
  14. <td>
  15. 国籍
  16. </td>
  17. <td>
  18. 电子邮箱
  19. </td>
  20. </tr>
  21. </thead>
  22. <tbody id="personBody">
  23. </tbody>
  24. </table>
  25. </div>

5.添加javascript代码,实现Ajax请求.首先要在头文件中引入JQuery

  1. <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
  2. <script type="text/javascript">
  3. $(function () {
  4. $.getJSON("PersonHandler.ashx", function (data, status) {
  5. if (status == "success") {
  6. $.each(data, function (index, item) {
  7. var beginTag = "<tr><td>";
  8. var endTag = "</td></tr>";
  9. var tag = "</td><td>";
  10. $("#personBody").append($(beginTag + item.Name + tag + item.Age + tag + item.Gender + tag
  11. + item.Country + tag + item.Email + endTag));
  12. });
  13. }
  14. });
  15. });
  16. </script>

$.getJSON可以进行异步Ajax请求,并可以直接返回JSON对象

  jQuery.getJSON(url,data,success(data,status,xhr))   

参数说明

参数 描述
url 必需。规定将请求发送的哪个 URL。
data 可选。规定连同请求发送到服务器的数据。
success(data,status,xhr)

可选。规定当请求成功时运行的函数。

额外的参数:

  • response - 包含来自请求的结果数据
  • status - 包含请求的状态
  • xhr - 包含 XMLHttpRequest 对象

运行效果:

Json.Net介绍及实例的更多相关文章

  1. Json.Net系列教程 1.Json.Net介绍及实例

    原文 Json.Net系列教程 1.Json.Net介绍及实例 本系列教程假设读者已经对Json有一定的了解,关于Json在这里不多说.本系列教程希望能对读者开发涉及到Json的.Net项目有一定的帮 ...

  2. Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一)

    原文:Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一) 拓展压缩包的使用方式详细介绍 1:将拓展包解压:ThinkPHP3.1.2_Extend.zip   --> 将其下的 \ ...

  3. 将Json数据 填充到 实例类 的函数

    /// <summary> /// 将Json数据 填充到 实例类 /// </summary> /// <typeparam name="T"> ...

  4. 最近想学Json,请问大家有没有什么好的Json教程介绍一下?

    最近想学json,请问大家有没有什么好的Json教程介绍一下? 最近学完java的框架了,想了解一下json,可是找不到相关视频,请大家有这方面的Json教程好资料就介绍下啦,最后有网址链接啦. {} ...

  5. redis锁机制介绍与实例

    转自:https://m.jb51.net/article/154421.htm 今天小编就为大家分享一篇关于redis锁机制介绍与实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要 ...

  6. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  7. Linux守护进程简单介绍和实例具体解释

    Linux守护进程简单介绍和实例具体解释 简单介绍 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程. ...

  8. Tstrings类简单介绍及实例

    用TStrings保存文件;var  S: TStrings;begin  S := TStringList.Create();  { ... }  S.SaveToFile('config.txt' ...

  9. js cookie介绍和实例(用于自动登录,记住用户名等)

    js cookie介绍和实例(用于自动登录,记住用户名等) 一.总结 1.cookie在客户端:因为js是最初是用来在客户端和服务器端进行通信使用的,所以客户端比如js可以操作cookie正常 2.c ...

随机推荐

  1. Android 4.4前后版本读取图库图片和拍照完美解决方案

    转载:http://blog.csdn.net/zbjdsbj/article/details/42387551 4.3或以下,选了图片之后,根据Uri来做处理,很多帖子都有了,我就不详细说了. 主要 ...

  2. [转] SQL Server游标的使用

    游标是邪恶的!        在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服.        ...

  3. Struts2 - 常用的constant标签[转]

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...

  4. php静态属性和静态方法

    php静态属性和静态方法 2012-09-29 10:18 1518人阅读 评论(0) 收藏 举报 phpfunction 本php教程主要是学习php中静态属性和静态方法的使用方法和基本的示例. · ...

  5. PHP结合Linux的cron命令实现定时任务

    PHP死循环 来处理定时任务的效率是很低的.(众多网友评价)大家都建议使用Linux内置的定时任务crontab命令来调用php脚本来实现. PHP定时任务的两种方法:1.web方式调用php网页,但 ...

  6. information_schema.profiling学习

    information_schema.profiling可以用来分析每一条SQL在它执行的各个阶段的用时,注意这个表是session 级的,也就是说如果session1 开启了它:session2没有 ...

  7. linux下JDK,tomcat的安装与环境变量配置

    先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm) ,下载后放在/home目录中,当然其它地方也行. 进入安装目录#cd /home#cp jdk-1_5_0_02-linu ...

  8. cxf2.7.10与Spring3.0.5集成时报错如下

    严重: Error listenerStart 2014-3-29 22:25:20 org.apache.catalina.core.StandardContext start 严重: Contex ...

  9. Silverlight 结合ArcGis 使用inforwindow

    原文 http://www.dotblogs.com.tw/justforgood/archive/2012/05/10/72089.aspx 也许有些人不知道什么事inforwindow,简单来说就 ...

  10. 怎样在Github参与一个开源项目

    转载:http://www.csdn.net/article/2014-04-14/2819293-Contributing-to-Open-Source-on-GitHub 最近一年开源项目特别的热 ...