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 相关文章推荐
javascript读取RSS数据
Jan 20 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
Sep 18 Javascript
js的2种继承方式详解
Mar 04 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
Apr 12 Javascript
javascript类型系统 Window对象学习笔记
Jan 07 Javascript
基于gulp合并压缩Seajs模块的方式说明
Jun 14 Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 Javascript
javascript事件的传播基础实例讲解(35)
Feb 14 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
Sep 03 Javascript
vue项目使用微信公众号支付总结及遇到的坑
Oct 23 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
Jun 18 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 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
php中常用编辑器推荐
2007/01/02 PHP
php 带逗号千位符数字的处理方法
2012/01/10 PHP
解析strtr函数的效率问题
2013/06/26 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
Python连接mysql数据库的正确姿势
2016/02/03 Python
python监控键盘输入实例代码
2018/02/09 Python
python对视频画框标记后保存的方法
2018/12/07 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
详解python运行三种方式
2019/05/13 Python
Python 3 判断2个字典相同
2019/08/06 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
python 将Excel转Word的示例
2021/03/02 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
和解协议书
2014/04/16 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
单位实习介绍信
2015/05/05 职场文书