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的闭包
Jan 17 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
May 07 Javascript
Jquery读取URL参数小例子
Aug 30 Javascript
基于javascript的COOkie的操作实现只能点一次
Dec 26 Javascript
JS获取Table中td值的方法
Mar 19 Javascript
vue bootstrap小例子一枚
Jun 09 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
解决vue页面DOM操作不生效的问题
Mar 17 Javascript
微信小程序实现图片上传放大预览删除代码
Jun 28 Javascript
vue this.reload 方法 配置
Sep 12 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
May 13 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时间不正确的解决方法
2008/04/09 PHP
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
php上传中文文件名乱码问题处理方案
2015/02/03 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
JavaScript中常见陷阱小结
2010/04/27 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python range实例用法分享
2020/02/06 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
策划主管的工作职责
2013/11/24 职场文书
孝老爱亲模范事迹
2014/01/24 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
争做文明公民倡议书
2014/08/29 职场文书
领导欢送会主持词
2015/07/06 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技