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跨域获得Json时invalid label错误的解决办法
Jan 11 Javascript
Ajax搜索结果页面下方的分页按钮的生成
Apr 05 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
Jun 24 Javascript
再探JavaScript作用域
Sep 24 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
Nov 06 Javascript
JavaScript的函数式编程基础指南
Mar 19 Javascript
JavaScript实现星星等级评价功能
Mar 22 Javascript
利用jQuery解析获取JSON数据
Apr 08 jQuery
JS实现520 表白简单代码
May 21 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
Feb 18 Javascript
使用Angular material主题定义自己的组件库的配色体系
Sep 04 Javascript
three.js利用射线Raycaster进行碰撞检测
Mar 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
PHP array 的加法操作代码
2010/07/24 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
JavaScript中双向数据绑定详解
2017/05/03 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
python3 对list中每个元素进行处理的方法
2018/06/29 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
用python进行视频剪辑
2020/11/02 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
告诉你怎样写创业计划书
2014/01/27 职场文书
优秀护士演讲稿
2014/04/30 职场文书
新农村建设汇报材料
2014/08/15 职场文书
离职感谢信
2015/01/21 职场文书
学校中秋节活动总结
2015/03/23 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers