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面向对象特性代码实例
Jun 12 Javascript
2种jQuery 实现刮刮卡效果
Feb 01 Javascript
js实现文字跟随鼠标移动而移动的方法
Feb 28 Javascript
javascript制作的简单注册模块表单验证
Apr 13 Javascript
js实现Select列表各项上移和下移的方法
Aug 14 Javascript
jquery实现点击页面回到顶部
Nov 23 Javascript
js获取地址栏中传递的参数(两种方法)
Feb 08 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
Express URL跳转(重定向)的实现方法
Apr 07 Javascript
layui分页效果实现代码
May 19 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
May 26 Javascript
Web开发使用Angular实现用户密码强度判别的方法
Sep 27 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数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
利用PHP实现短域名互转
2013/07/05 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
PHP读取Excel类文件
2017/05/15 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
Python素数检测实例分析
2015/06/15 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
Python处理session的方法整理
2019/08/29 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
Python 实现向word(docx)中输出
2020/02/13 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
主要的Ajax框架都有什么
2013/11/14 面试题
小学教师师德师风自我剖析材料
2014/09/29 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
教师节感想
2015/08/11 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS