Json.NET、fastJSON、ServiceStack.Text简单序列化操作性能测试

由于最近项目中需要用到JSON序列化操作,所以对JSON序列化框架做了一下对比。

Json.NET(Newtonsoft.Json)是我们平常用的最多的框架,现在成为了Visual Studio Web项目模板默认引用的库之一;fastJSON号称是最小最快的序列化工具;ServiceStack.Text是著名的Stack Exchange团队的开源项目。下面我们开始测试工作:

测试环境:操作系统Windows 8.1,CPU:Intel Core i7-3610QM,Visual Studio 2013。

我们先创建一个控制台应用程序,从NuGet中添加3个库最新版本的引用。

创建一个可序列化类型:

1 [Serializable]
2 public class Person {
3     public int Id { get; set; }
4     public string Name { get; set; }
5     public int Age { get; set; }
6     public bool Gender { get; set; }
7     public string Address { get; set; }
8     public string IDCard { get; set; }
9 }

添加一个公共方法循环执行序列化操作:

 1 /// <summary>
 2 /// 循环执行序列化操作
 3 /// </summary>
 4 /// <typeparam name="T"></typeparam>
 5 /// <param name="entity">需要执行序列化操作的实体</param>
 6 /// <param name="testName">库的名称</param>
 7 /// <param name="count">循环测试</param>
 8 /// <param name="func">序列化方法的委托</param>
 9 private static void PerformanceTest<T>(T entity, string testName, int count, Action<T> func) where T : class {
10     var stopwatch = new Stopwatch();
11     stopwatch.Start();
12     for (var i = 0; i < count; i++) {
13         func.Invoke(entity);
14     }
15     stopwatch.Stop();
16     Console.WriteLine("{0}: {1}", testName, stopwatch.ElapsedMilliseconds);
17 }

接下来就可以在Main方法里面调用了:

 1 static void Main() {
 2     var person = new Person {
 3         Id = 1,
 4         Name = "Vision Ding",
 5         Age = 28,
 6         Gender = true,
 7         Address = "广东省广州市天河区",
 8         IDCard = "42XXXX198XXXXXXXXX"
 9     };
10     for (var i = 0; i < 10; i++) {
11         Console.WriteLine("第{0}次执行:", i + 1);
12         PerformanceTest(person, "Json.NET", 100000, p => JsonConvert.SerializeObject(p));
13         PerformanceTest(person, "fastJSON", 100000, p => JSON.ToJSON(p));
14         PerformanceTest(person, "ServiceStack", 100000, p => p.ToJson());
15     }
16 }

我们循环执行了10次,得到的结果如下(单位毫秒):

  Json.NET fastJSON ServiceStack.Text
1 480 342 406
2 218 308 251
3 216 307 235
4 219 326 235
5 220 310 251
6 215 308 232
7 217 309 233
8 216 305 233
9 216 306 233
10 218 306 269

从上面的执行结果可以开出,在第一次执行的时候fastJSON最快,Json.NET最慢,但是后面的9次刚好相反。由于每次循环都是执行10W次序列化操作,相差不过几十毫秒,所以这点性能差距几乎可以忽略不计,选择Json.NET还是很可靠的。

上面3个类库的官方网站:

  1. Json.NET: http://json.codeplex.com/
  2. fastJSON: http://www.codeproject.com/Articles/159450/fastJSON
  3. ServiceStack.Text: https://github.com/ServiceStack/ServiceStack.Text
时间: 2024-12-28 09:53:07

Json.NET、fastJSON、ServiceStack.Text简单序列化操作性能测试的相关文章

YxdJSON - Delphi 高性能 JSON 库(支持RTTI和序列化操作)

Delphi 高性能 JSON 库(支持RTTI和序列化操作) 支持平台: Windows, Android, iOS, Mac OS https://github.com/yangyxd/YxdJson

Python json.dumps 特殊数据类型的自定义序列化操作

场景描述: Python标准库中的json模块,集成了将数据序列化处理的功能:在使用json.dumps()方法序列化数据时候,如果目标数据中存在datetime数据类型,执行操作时, 会抛出异常:TypeError: datetime.datetime(2016, 12, 10, 11, 04, 21) is not JSON serializable 那么遇到json.dumps序列化不支持的数据类型,该怎么办! 首先,我们先来了解一下,json.dumps,序列化操作默认支持的数据类型:

使用 ServiceStack.Text 序列化 json的实现代码

相信做 .net 开发的朋友经常会遇到 json 序列化这样的需要,今天发篇文章总结下自己使用ServiceStack.Text 来序列化 json.它的速度比 Newtonsoft.Json 快很多,在测试时发现比 fastJson 还快些. 首先,我们有下边两个类,一个是职员(Staff)类,一个是联系方式(Contact)类: public class Staff { public long ID { get; set; } public string Name { get; set; }

ServiceStack.Text / Newtonsoft.Json 两种json序列化性能比较

JSON序列化现在应用非常多,尤其在前后端分离的情况下,平常大多数C#下都使用Newtonsoft.Json来操作,量少的情况下,还可以忽略,但量大的情况下就要考虑使用ServiceStack.Text来操作,序列化性能差不多,反序列化性能要高一倍左右 int count = 10000; User user = new User() { Id = 1, Name = "tyh", AddTime = DateTime.Now, Age = 15, Status = true }; s

ServiceStack.Text json中序列化日期格式问题的解决

标记: ServiceStack.Text,json,序列化,日期 在使用ServiceStack.Text的序列化为json格式的时候,当属性为datetime的时候,返回的是一个new date(324234234)的字符串,看着非常不爽. 如果是js来获取结果还好, 如果是c#获取这种字符串是没有办法转化为时间的. 所以我改造了下,让返回的是'2015-06-06 09:11:11'的格式. 先获取源码, 然后在jsconfig.cs中加入如下代码 Code Snippet private

ServiceStack.Text 的JSON序列号和反序列化

使用 ServiceStack.Text 序列化 json的实现代码 http://www.jb51.net/article/38338.htm 中文的一个ServiceStack 序列化示例 ServiceStack de JSON序列化其的性能测试: Benchmarks for .NET's JSON Serializers http://www.servicestack.net/benchmarks/ ServiceStack 的 JSON序列化操作的一篇很不错的示例说明: Servic

ServiceStack.Text 更快的序列化

Json.net 是以前最经常用的序列化组件,后来又注意到ServiceStack号称最快的,所以我做了以下测试 1)Json.net using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using Newtonsoft.Json; namespace Json.net { class Program { static voi

阿里巴巴Json工具-Fastjson讲解

Fastjson是阿里巴巴公司开源的速度最快的Json和对象转换工具,一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一.2.功能qiang打,支持JDK的各种类型,包括基本的JavaBean.Collection.Map.Date.Enum.泛型.3.无依赖,不需要例外额外的jar,能够直接跑在JDK上.4.开源,使用Apache License 2.0协议开源.http://code.alibabatech.com/wiki/d

(转)JSON 之FastJson解析

一.阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser.包括自称最快的JackJson:功能强大,完全支持Java Bean.集合.Map.日期.Enum,支持范型,支持自省:无依赖,能够直接运行在Java SE 5.0以上版本:支持Android:开源 (Apache 2.0) Fastjson API入口类是com.alibaba.fastjso