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入门基础之私有变量
Feb 23 Javascript
jquery 简单的进度条实现代码
Mar 11 Javascript
javascript中window.event事件用法详解
Dec 11 Javascript
js进行表单验证实例分析
Feb 10 Javascript
JS中常用的正则表达式
Sep 29 Javascript
js实现多张图片延迟加载效果
Jul 17 Javascript
10个最优秀的Node.js MVC框架
Aug 24 Javascript
bootstrap+jquery项目引入文件报错的解决方法
Jan 22 jQuery
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
layer页面跳转,获取html子节点元素的值方法
Sep 27 Javascript
node.js中事件触发器events的使用方法实例分析
Nov 23 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
Dec 04 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
python函数形参用法实例分析
2015/08/04 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
python实现ping命令小程序
2020/12/28 Python
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript
MySQL日期时间函数知识汇总
2022/03/17 MySQL