Jil,高效的json序列化和反序列化库


Posted in Javascript onFebruary 15, 2017

谷歌的potobuf不说了,它很牛B,但是对客户端对象不支持,比如JavaScript就读取不了。

Jil很牛,比Newtonsoft.Json要快很多,且支持客户端,此处只贴代码:

using Jil;
using System.Runtime.Serialization;

[Serializable]
 class Employee
 {
  //[JilDirective(Name = "cid")]
  public int Id { get; set; }
  [IgnoreDataMember]
  public string Name { get; set; }
  [DataMember(Name = "kkl")]
  public string Address { get; set; }
 
  public Employee() { } //必须要有一个午餐的构造函数

  public Employee(int EmployeeId, string Name)
  {
  this.Id = EmployeeId;
  this.Name = Name;
  }
 }var jsonString = string.Empty;
  using (var output = new StringWriter())
  {
  JSON.Serialize(new Employee(666, "zhangsan"), output);
  Console.WriteLine(output);
  jsonString = output.ToString();
  }

  using (var input = new StringReader(jsonString))
  {
  //var result = JSON.DeserializeDynamic(jsonString);
  //var result = JSON.Deserialize<Employee>(jsonString);
  var result = JSON.Deserialize<Employee>(input);
  Console.WriteLine("id:{0},name:{1}", result.Id, result.Name);
  }

需要注意的是,反序列化的强类型对象必须要有无参的构造函数或者只有一个参数的构造函数。

Such a type should have one declared field or property, and default or single parameter constructor.

对于时间处理,默认是ISO8601方式,可通过配置修改:

Options _jilOptions = new Options(
  dateFormat: DateTimeFormat.MillisecondsSinceUnixEpoch,
  includeInherited: true,
  serializationNameFormat: SerializationNameFormat.CamelCase
  );

  var output = JSON.Serialize(new
  {
  UserName = "jon",
  TradingPassword = "123456",
  ClientIp = "192.168.3.1",
  Origin = 1,
  time = DateTime.Now
  }, _jilOptions);
  Console.WriteLine(output);

  Console.WriteLine("----------------");

  var pt = "1459481266695"; //时间戳
  DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
  //说明下,时间格式为13位后面补加4个"0",如果时间格式为10位则后面补加7个"0" 
  long lTime = long.Parse(pt + (pt.Length == 13 ? "0000" : "0000000"));
  var dtResult = dtStart.Add(new TimeSpan(lTime)); //得到转换后的时间 
  Console.WriteLine(dtResult);

  Console.WriteLine("----------------");

  var _time = DateTime.Now.Ticks;
  Console.WriteLine(DateTime.Now.ToString());
  Console.WriteLine("当前时间转换后模式:---------------->");
  var dt = DateTime.FromBinary(_time); //635951023596206937【注意,此处与】
  Console.WriteLine(dt.ToLongDateString()); //2016年4月1日
  Console.WriteLine(dt.ToLongTimeString()); //10:12:39
  Console.WriteLine(dt.ToShortDateString()); //2016/4/1
  Console.WriteLine(dt.ToShortTimeString()); //10:12
  Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm:ss")); //2016-04-01 10:12:39

输入如下:

Jil,高效的json序列化和反序列化库

关于客户端时间戳的js处理,可参阅此文:js时间戳和c#时间戳互转方法(推荐)

var date = new Date(1459481266695);
Y = date.getFullYear() + '-';
M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
D = date.getDate() + ' ';
h = date.getHours() + ':';
m = date.getMinutes() + ':';
s = date.getSeconds(); 
console.log(Y+M+D+h+m+s); 
VM307:9 2016-04-1 11:27:46

js客户端获取时间戳:

var dt= new Date().getTime();

以上这篇Jil,高效的json序列化和反序列化库就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
Dec 06 Javascript
utf8的编码算法 转载
Dec 27 Javascript
Javascript 原型和继承(Prototypes and Inheritance)
Apr 01 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
jQuery实现图片放大预览实现原理及代码
Sep 12 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
Sep 15 Javascript
jQuery使用$.each遍历json数组的简单实现方法
Apr 18 Javascript
jQuery时间日期三级联动(推荐)
Nov 27 Javascript
JS实现的简单拖拽功能示例
Mar 13 Javascript
Vue实现侧边菜单栏手风琴效果实例代码
May 31 Javascript
微信小程序wx.request的简单封装
Nov 13 Javascript
JavaScript实现栈结构Stack过程详解
Mar 07 Javascript
Bootstrap模态框使用详解
Feb 15 #Javascript
js时间戳和c#时间戳互转方法(推荐)
Feb 15 #Javascript
浅析javaScript中的浅拷贝和深拷贝
Feb 15 #Javascript
微信小程序之MaterialDesign--input组件详解
Feb 15 #Javascript
Bootstrap table简单使用总结
Feb 15 #Javascript
原生js轮播(仿慕课网)
Feb 15 #Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 #Javascript
You might like
10条PHP编程习惯助你找工作
2008/09/29 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
Symfony查询方法实例小结
2017/06/28 PHP
js 获取Listbox选择的值的代码
2010/04/15 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
javascript实现简易计算器
2017/02/01 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
python 多线程重启方法
2019/02/18 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
基于python监控程序是否关闭
2020/01/14 Python
如何解决安装python3.6.1失败
2020/07/01 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
JSF如何进行表格处理及取值
2012/08/06 面试题
大学生军训感想
2014/02/16 职场文书
母婴店促销方案
2014/03/05 职场文书
开除员工通知
2015/04/22 职场文书
html5表单的required属性使用
2021/07/07 HTML / CSS
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android
MySQL学习之基础命令实操总结
2022/03/19 MySQL
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB