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 相关文章推荐
jquery tab标签页的制作
May 10 Javascript
javascript字符串替换及字符串分割示例代码
Dec 12 Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 Javascript
Javascript闭包用法实例分析
Jan 23 Javascript
JavaScript将字符串转换成字符编码列表的方法
Mar 19 Javascript
jQuery实现的表格展开伸缩效果实例
Sep 07 Javascript
实例教学如何写vue插件
Nov 30 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
Jan 15 Javascript
原生JS实现的跳一跳小游戏完整实例
Jan 27 Javascript
vue动态注册组件实例代码详解
May 30 Javascript
vue 扩展现有组件的操作
Aug 14 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
Aug 19 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开发规范手册之PHP代码规范详解
2011/01/13 PHP
php-fpm配置详解
2014/02/12 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
JavaScript内核之基本概念
2011/10/21 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
Python 闭包的使用方法
2017/09/07 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
解决pip install psycopg2出错问题
2020/07/09 Python
python中字典增加和删除使用方法
2020/09/30 Python
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
巴西本土电商平台:Americanas
2020/06/21 全球购物
争当四好少年演讲稿
2014/09/13 职场文书
担保书格式
2015/01/20 职场文书
幼儿园开学家长寄语(2016春季)
2015/12/03 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
python Polars库的使用简介
2021/04/21 Python
Python 视频画质增强
2022/04/28 Python
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js