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 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
javascript写的日历类(基于pj)
Dec 28 Javascript
Javascript base64编码实现代码
Dec 02 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
Apr 18 Javascript
JavaScript打印网页指定区域的例子
May 03 Javascript
JQuery 使用attr方法实现下拉列表选中
Oct 13 Javascript
jquery获取文档高度和窗口高度汇总
Jan 25 Javascript
node.js利用redis数据库缓存数据的方法
Mar 01 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
十大热门的JavaScript框架和库
Mar 21 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
Nov 21 Javascript
vue data对象重新赋值无效(未更改)的解决方式
Jul 24 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中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
vue跨域解决方法
2017/10/15 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
javascript全局自定义鼠标右键菜单
2020/12/08 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
简单了解python单例模式的几种写法
2019/07/01 Python
Django时区详解
2019/07/24 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
python 线程的五个状态
2020/09/22 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
单位门卫岗位职责
2013/12/20 职场文书
集体婚礼证婚词
2014/01/13 职场文书
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android