Json.Net系列教程 1.Json.Net介绍及实例-阿里云开发者社区

开发者社区> 杰克.陈> 正文

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

简介: 原文 Json.Net系列教程 1.Json.Net介绍及实例 本系列教程假设读者已经对Json有一定的了解,关于Json在这里不多说.本系列教程希望能对读者开发涉及到Json的.Net项目有一定的帮 助.本系列教程是根据官方文档资料和自己项目应用汇总而成.如果觉得本系列对你有用,望多多关注.本人还只是个未毕业的学生,水平有限,尽请指正. 一.Json.Net有什么用?   Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。
+关注继续查看

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

本系列教程假设读者已经对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对象

复制代码
    /// <summary>
    /// 包含用户的基本信息
    /// </summary>
    public class Person
    {
        /// <summary>
        /// 获取或设置用户名
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 获取或设置用户年龄
        /// </summary>
        public int Age { get; set; }

        /// <summary>
        /// 获取或设置用户性别
        /// </summary>
        public string Gender { get; set; }

        /// <summary>
        /// 获取或设置用户国籍
        /// </summary>
        public string Country { get; set; }

        /// <summary>
        /// 获取或设置用户电子邮箱
        /// </summary>
        public string Email { get; set; }
    }
复制代码

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

复制代码
    /// <summary>
    /// 用户操作类
    /// </summary>
    public class PersonRepository
    {
        /// <summary>
        /// 获取用户列表
        /// </summary>
        /// <returns>所有用户信息</returns>
        public static List<Person> GetPersons()
        {
            List<Person> ps = new List<Person>();
            Person p1 = new Person { Name = "Tom", Age = 32, Country = "US", Gender = "Male", Email = "tom@gmail.com" };
            Person p2 = new Person { Name = "Jack", Age = 23, Country = "UK", Gender = "Male", Email = "jack@gmail.com" };
            Person p3 = new Person { Name = "Eden", Age = 25, Country = "Canada", Gender = "Female", Email = "eden@gmail.com" };
            Person p4 = new Person { Name = "Li Hua", Age = 29, Country = "China", Gender = "Male", Email = "lihui@163.com" };
            Person p5 = new Person { Name = "Lvo", Age = 40, Country = "US", Gender = "Male", Email = "lvo@gmail.com" };
            ps.Add(p1);
            ps.Add(p2);
            ps.Add(p3);
            ps.Add(p4);
            ps.Add(p5);
            return ps;
        }
    }
复制代码

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

复制代码
    /// <summary>
    /// 处理用户类的请求
    /// </summary>
    public class PersonHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            List<Person> persons = PersonRepository.GetPersons();
            string json = JsonConvert.SerializeObject(persons);
            context.Response.Write(json);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
复制代码

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

string json = JsonConvert.SerializeObject(Object obj);

 

还可以通过JsonSerializer来实现

复制代码
              JsonSerializer serializer = new JsonSerializer();
            StringBuilder sb = new StringBuilder();
            StringWriter sw = new StringWriter(sb);
            JsonWriter writer = new JsonTextWriter(sw);
            serializer.Serialize(writer, persons);
            string json = sb.ToString();
复制代码

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

复制代码
public static string SerializeObject(object value, Formatting formatting, JsonSerializerSettings settings)
{
    JsonSerializer jsonSerializer = JsonSerializer.Create(settings);
    StringBuilder sb = new StringBuilder(0x100);
    StringWriter sw = new StringWriter(sb, CultureInfo.InvariantCulture);
    using (JsonTextWriter jsonWriter = new JsonTextWriter(sw))
    {
        jsonWriter.Formatting = formatting;
        jsonSerializer.Serialize(jsonWriter, value);
    }
    return sw.ToString();
}

 
复制代码

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

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

复制代码
    <div>
        <table border="1">
            <thead>
                <tr>
                 <td>
                        用户名
                    </td>
                 <td>
                        年龄
                    </td>
                 <td>
                        性别
                    </td>
                 <td>
                        国籍
                    </td>
                 <td>
                        电子邮箱
                    </td>
                </tr>
            </thead>
            <tbody id="personBody">
            </tbody>
        </table>
    </div>
复制代码

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

复制代码
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $.getJSON("PersonHandler.ashx", function (data, status) {
                if (status == "success") {
                    $.each(data, function (index, item) {
                        var beginTag = "<tr><td>";
                        var endTag = "</td></tr>";
                        var tag = "</td><td>";
                        $("#personBody").append($(beginTag + item.Name + tag + item.Age + tag + item.Gender + tag
                        + item.Country + tag + item.Email + endTag));
                    });
                }
            });
        });
    </script>
复制代码

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

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

 

参数说明

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

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

额外的参数:

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

 

 

 

 

 

 

 

 

 

运行效果:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JSTL入门实例
&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; &lt;%@page import="bean.Person"%&gt; &lt;%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt; &lt;!DOCTYPE
945 0
菜鸟入门【ASP.NET Core】7:WebHost的配置、 IHostEnvironment和 IApplicationLifetime介绍、dotnet watch run 和attach到进程调试
WebHost的配置 我们用vs2017新建一个空网站HelloCore 可以使用ConfigureAppConfiguration对配置进行更改,比如说添加jsonfile和commandline配置。
1826 0
TensorFlow新功能:TensorFlow Probability概率编程工具箱介绍
2018年,tensorflow开发者峰会上,tensorflow管理人员发布了:TensorFlow Probability——一种概率编程工具箱,用于机器学习研究人员和从业人员快速可靠地构建利用最先进硬件的复杂模型。快来学习一下吧~
3345 0
js之radio应用实例
radio和checkbox还有select,可谓是前后端常用三剑客啊!特别是checkbox和select,关于这两个今天不讲,因为在下面这几篇文章,我已经比较详细的讲解了。 SpringMVC之ajax+select下拉框交互常用方式 checkbox选中并通过ajax传数组到后台接收 关于checkbox自动选中 今天主要讲解的是radio。
987 0
Json.Net系列教程 3.Json.Net序列化和反序列化设置
原文 Json.Net系列教程 3.Json.Net序列化和反序列化设置 上节补充 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.
823 0
教程: Ext 2.0 介绍
本教程适用于Ext 2.0的版本,而版本1.x仍可找到。 无论你是Ext库的新手,抑或是想了解Ext的人,本篇文章的内容都适合你。本文将简单地介绍Ext的几个基本概念,和如何快速地做出一个动态的页面并运行起来,假设读者已具备了一些JavaScript经验和简单了解HTML的文档对象模型(document object model ,DOM)。
873 0
+关注
杰克.陈
一个安静的程序猿~
10427
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载