前言:作为开发人员,对象的序列化经常用到,特别是在现在前后端分离 采用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
  • 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# 序列化效率比拼的更多相关文章

  1. 序列化效率比拼——谁是最后的赢家Newtonsoft.Json

    前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...

  2. 序列化效率比拼——谁是最后的赢家avaScriptSerializer方式、DataContract方式、Newtonsoft.Json

    前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...

  3. c#基础系列:序列化效率比拼——谁是最后的赢家Newtonsoft.Json

    前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...

  4. C#序列化效率对比

    原文出处:https://www.cnblogs.com/landeanfen/p/4627383.html 从使用序列化到现在,用到的无非下面几种方式:(1)JavaScriptSerializer ...

  5. C# .NET的BinaryFormatter、protobuf-net、Newtonsoft.Json以及自己写的序列化方法序列化效率和序列化后的文件体积大小对比

    测试结果如下图: 测试结果整理后: 结论: 1.这几个工具中,protobuf-net序列化和反序列化效率是最快的 2.BinaryFormatter和Newtonsoft.Json反序列化慢的比较多 ...

  6. mysql limit分页查询效率比拼

    1.直接使用数据库提供的SQL语句 limit M ,N SELECT * from message limit 0 , 10 ; -- 0.044 SELECT * from message lim ...

  7. C#扩展方法知多少

    前言:上篇 序列化效率比拼——谁是最后的赢家Newtonsoft.Json 介绍了下序列化方面的知识.看过Demo的朋友可能注意到了里面就用到过泛型的扩展方法,本篇打算总结下C#扩展方法的用法.博主打 ...

  8. C#基础系列——委托和设计模式(二)

    前言:前篇 C#基础系列——委托实现简单设计模式 简单介绍了下委托的定义及简单用法.这篇打算从设计模式的角度去解析下委托的使用.我们知道使用委托可以实现对象行为(方法)的动态绑定,从而提高设计的灵活性 ...

  9. C#基础系列——再也不用担心面试官问我“事件”了

    前言:作为.Net攻城狮,你面试过程中是否遇到过这样的问题呢:什么是事件?事件和委托的区别?既然事件作为一种特殊的委托,那么它的优势如何体现?诸如此类...你是否也曾经被问到过?你又是否都答出来了呢? ...

随机推荐

  1. JSON获取地址

    JSON获取地址一: https://github.com/stleary/JSON-java JSON获取地址二: http://genson.io/ JSON获取地址一: https://code ...

  2. [转帖] Linux 时间参数

    Linux下文件的三个时间参数 https://blog.csdn.net/GGxiaobai/article/details/53609478 想用touch修改创建时间呢 发现不知道怎么修改来着. ...

  3. 腾讯云服务器哪个地区节点好?来ping一下速度就知道了

    腾讯云服务器怎么样?速度快吗?相信很多网友在购买云服务器之前都有此疑惑. 本人找了很久也没找到各区域节点的测试速度的域名和IP.即使有也不能批量查看对比哪个区域的速度. 网上都说这个区域节点速度快,那 ...

  4. bugku crypto 告诉你一个秘密(ISCCCTF)

    emmmm....有点坑 题目: 636A56355279427363446C4A49454A7154534230526D6843 56445A31614342354E326C4B4946467A57 ...

  5. JavaScript判断是否为微信浏览器或支付宝浏览器

    可以用手机安装的微信和支付宝扫描下方二维码测试 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  6. loj121-动态图连通性

    Solution 线段树分治, 然后直接在线段树上dfs, 在进入/回溯的过程中维护并查集的merge/split. 对于split操作, 可以在merge时按秩合并, 然后利用栈记录, split时 ...

  7. MVC EF 移除建表时自动加上s的复数形式

    移除建表时自动加上s的复数形式 public class DBContext : DbContext { public DBContext() : base("name=DBContext& ...

  8. PWA 渐进式Web应用程序 - 解释

    想象一下,如果一个网站上所有的功能都能够作为一个移动应用程序为用户所用——任何设备上都可以使用.可接收所有的通知.离线模式可用,为了实现这个愿景,2015年,谷歌创造了渐进式Web应用程序(PWA). ...

  9. practice01

    1. 组合数公式: C(n, k) =C(n-1, k) +C(n-1, k-1) 要求利用该公式写递归函数求组合数. #include <stdio.h> int C(int a,int ...

  10. 熵值法 [异质指标同质化]中-Matlab 数据归一化预处理 mapminmax函数

    一.mapminmax Process matrices by mapping row minimum and maximum values to [-1 1] 意思是将矩阵的每一行处理成[-1,1] ...