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 相关文章推荐
远离JS灾难css灾难之 js私有函数和css选择器作为容器
Dec 11 Javascript
JS中的public和private对象,即static修饰符
Jan 18 Javascript
IE8中使用javascript动态加载CSS的解决方法
Jun 17 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
jQuery地图map悬停显示省市代码分享
Aug 20 Javascript
浅谈JS中的bind方法与函数柯里化
Aug 10 Javascript
微信小程序 Record API详解及实例代码
Sep 30 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
Feb 24 Javascript
js 调用百度分享功能
Feb 27 Javascript
webpack3之loader全解析
Oct 26 Javascript
简单说说angular.json文件的使用
Oct 29 Javascript
微信小程序自定义导航教程(兼容各种手机)
Dec 12 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
php根据命令行参数生成配置文件详解
2019/03/15 PHP
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
python实现比较文件内容异同
2018/06/22 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
中国旅游网站:同程旅游
2016/09/11 全球购物
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
运行时异常与一般异常有何异同?
2014/01/05 面试题
C#面试问题
2016/07/29 面试题
拾金不昧的表扬信
2014/01/16 职场文书
学生会招新策划书
2014/02/14 职场文书
大学生个人求职信例文
2014/07/07 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
走进科学观后感
2015/06/18 职场文书