c# 序列化效率比拼
前言:作为开发人员,对象的序列化经常用到,特别是在现在前后端分离 采用json 交互 ,就将原来用过的几种方式总结了下,也算是做一个记录,顺便做了下性能测试。
1:内置 JavaScriptSerializer
2:常用 Newtonsoft.Json.dll
3:第3方 Jil https://github.com/kevin-montrose/Jil
using Jil;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Web.Script.Serialization; namespace csDemo
{
class Program
{
static void Main(string[] args)
{
var sp_script = new Stopwatch();
//模拟数据源 默认10w
var dataLsit = GetData(); #region JavaScriptSerializer 添加 System.Web.Extensions引用
sp_script.Start();//开始计数
var js = new JavaScriptSerializer
{
MaxJsonLength = Int32.MaxValue //设置为int的最大值
};
js.Serialize(dataLsit);
sp_script.Stop();
Console.WriteLine("JavaScriptSerializer序列化方式序列化" + dataLsit.Count + "个对象耗时:" + sp_script.ElapsedMilliseconds + "毫秒");
#endregion #region Newtonsoft.Json.dll
sp_script.Restart();//停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间。
JsonConvert.SerializeObject(dataLsit); ;
sp_script.Stop();
Console.WriteLine("Newtonsoft 序列化方式序列化" + dataLsit.Count + "个对象耗时:" + sp_script.ElapsedMilliseconds + "毫秒");
#endregion #region Jil 序列化 取出数据 output.ToString();
sp_script.Restart();
using (var output = new StringWriter())
{
JSON.Serialize(dataLsit,output ); }
sp_script.Stop();
Console.WriteLine("Jil 序列化方式序列化" + dataLsit.Count + "个对象耗时:" + sp_script.ElapsedMilliseconds + "毫秒");
#endregion
} // 测试模拟数据源 length 默认参数10w
public static dynamic GetData(int length=)
{
var lstRes = new List<dynamic>();
for (var i = ; i < length; i++)
{
var data = new
{
Name = "张三" + i,
Age = ,
IsChild = i % == ? true : false,
Test1 = DateTime.Now,
Test2 = i.ToString(),
Test3 = i.ToString(),
Test4 = i.ToString(),
Test5 = i.ToString(),
Test6 = i.ToString(),
Test7 = i.ToString(),
Test8 = i.ToString(),
Test9 = i.ToString(),
Test10 = i.ToString()
}; lstRes.Add(data);
}
return lstRes;
}
}
总结:使用过程中发现GetData方法 使用dynamic (开始使用实体类) 效率反而快一点。 特别是 Jil 更明显。
Jil 学习地址:
https://github.com/kevin-montrose/Jil
https://www.dotnetjalps.com/2015/10/convert-c-object-into-json-and-vice.html
附加 webapi :使用Jil提升Json序列化性能
https://blog.csdn.net/sqqyq/article/details/51692342
注意:jil 对序列化类型有要求:(如果是object 或者是dataset 不支持) 时间需要自定义 建议时间数据转换string 默认的格式 yyyy-MM-dd hh:mm:ss
Supported Types
Jil will only (de)serialize types that can be reasonably represented as JSON.
The following types (and any user defined types composed of them) are supported:
- Strings (including char)
- Booleans
- Integer numbers (int, long, byte, etc.)
- Floating point numbers (float, double, and decimal)
- DateTimes & DateTimeOffsets
- Note that DateTimes are converted to UTC time to allow for round-tripping, use DateTimeOffsets if you need to preserve timezone information
- See Configuration for further details
- TimeSpans
- See Configuration for further details
- Nullable types
- Enumerations
- Including [Flags]
- Guids
- Only the "D" format
- IList<T>, ICollection<T>, and IReadOnlyList<T> implementations
- IDictionary<TKey, TValue> implementations where TKey is a string or enumeration
- ISet<T>
额外笔记:
css 学习网址 :https://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/
js:http://www.ruanyifeng.com/blog/archives.html
工作记录:
页面导入exel 建议使用 js-xlsx
) 提交到后台在逻辑判断 。2次请求改成一次请求,减少中间过程序列化反序列。
js-xlsx:https://www.cnblogs.com/liuxianan/p/js-excel.html
c# 序列化效率比拼的更多相关文章
- 序列化效率比拼——谁是最后的赢家Newtonsoft.Json
前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...
- 序列化效率比拼——谁是最后的赢家avaScriptSerializer方式、DataContract方式、Newtonsoft.Json
前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...
- c#基础系列:序列化效率比拼——谁是最后的赢家Newtonsoft.Json
前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...
- C#序列化效率对比
原文出处:https://www.cnblogs.com/landeanfen/p/4627383.html 从使用序列化到现在,用到的无非下面几种方式:(1)JavaScriptSerializer ...
- C# .NET的BinaryFormatter、protobuf-net、Newtonsoft.Json以及自己写的序列化方法序列化效率和序列化后的文件体积大小对比
测试结果如下图: 测试结果整理后: 结论: 1.这几个工具中,protobuf-net序列化和反序列化效率是最快的 2.BinaryFormatter和Newtonsoft.Json反序列化慢的比较多 ...
- mysql limit分页查询效率比拼
1.直接使用数据库提供的SQL语句 limit M ,N SELECT * from message limit 0 , 10 ; -- 0.044 SELECT * from message lim ...
- C#扩展方法知多少
前言:上篇 序列化效率比拼——谁是最后的赢家Newtonsoft.Json 介绍了下序列化方面的知识.看过Demo的朋友可能注意到了里面就用到过泛型的扩展方法,本篇打算总结下C#扩展方法的用法.博主打 ...
- C#基础系列——委托和设计模式(二)
前言:前篇 C#基础系列——委托实现简单设计模式 简单介绍了下委托的定义及简单用法.这篇打算从设计模式的角度去解析下委托的使用.我们知道使用委托可以实现对象行为(方法)的动态绑定,从而提高设计的灵活性 ...
- C#基础系列——再也不用担心面试官问我“事件”了
前言:作为.Net攻城狮,你面试过程中是否遇到过这样的问题呢:什么是事件?事件和委托的区别?既然事件作为一种特殊的委托,那么它的优势如何体现?诸如此类...你是否也曾经被问到过?你又是否都答出来了呢? ...
随机推荐
- dedecms织梦的不同栏目调用不同banner图的方法
在做织梦站的时候我们会有不同的栏目,比如联系我们,产品中心等等,banner也不一样,方法如下: 我们可以使用织梦的顶级栏目ID标签,把图片命名成顶级栏目typeid ,代码如下: <img s ...
- [Alpha阶段]项目展示博客
目录 Alpha阶段项目展示 1.团队成员介绍 2.工程相关信息 (1)我们的用户 (2)产品表现 (3)团队分工 (4)项目管理 (5)测试 (6)文档 (7)用户调研 3.项目信息 (1)实际进展 ...
- 使用VScode配合chrome实现网页自动刷新
1.使用插件:livereload 2.VScode商店中搜索上述插件安装 3.Chrome商店中搜素上述插件安装 并设置允许访问文件网址: 4.在两方插件都打开的情况下,VScode中按下ctrl+ ...
- css 3 新特性
CSS3的新特性大致分为以下六类 1.CSS3选择器 2.CSS3边框与圆角 3.CSS3背景与渐变 4.CSS3过渡 5.CSS3变换 6.CSS3动画 下面分别说一说以上六类都有哪些内容 CSS3 ...
- <generatePublisherEvidence> 元素
<configuration> <runtime> <generatePublisherEvidence enabled="false"/> & ...
- Delphi 获取DataSet传入参数后的SQL命令
ClientDataSet1.CommandText := sSQL; ClientDataSet1.Params.Clear; ClientDataSet1.CommandText :='SEL ...
- 「Algospot」龙曲线DRAGON
一道考验思维的好题,顺便总结求第k大问题的常规思路: 传送门:$>here<$ 题意 给出初始串FX,每分形一次所有X替换为X+YF,所有Y替换为FX-Y.问$n$代字符串第$p$位起长度 ...
- CCF201812-3 CIDR合并
按题意模拟即可...主要CCF吞代码... #include<bits/stdc++.h> #define pb push_back #define mp make_pair #defin ...
- js-sha256源码
/** * [js-sha256]{@link https://github.com/emn178/js-sha256} * * @version 0.9.0 * @author Chen, Yi-C ...
- Swagger UI及 Swagger editor教程 API文档搭配 Node使用
swagger ui 是一个在线文档生成和测试的利器,目前发现最好用的.为啥好用呢?打开 demo,支持API自动生成同步的在线文档些文档可用于项目内部API审核方便测试人员了解 API这些文档可作为 ...