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入门教程(9) Document文档对象
Jan 31 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
Mar 10 Javascript
node.js中的fs.statSync方法使用说明
Dec 16 Javascript
js+html5实现可在手机上玩的拼图游戏
Jul 17 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 Javascript
jQueryUI Datepicker组件设置日期高亮
Oct 13 Javascript
Bootstrap php制作动态分页标签
Dec 23 Javascript
jQuery实现元素的插入
Feb 27 Javascript
tab栏切换原理
Mar 22 Javascript
使用axios实现上传图片进度条功能
Dec 21 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
Apr 03 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实现二分查找算法代码分享
2011/06/24 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
Python生成密码库功能示例
2017/05/23 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
python实现Decorator模式实例代码
2018/02/09 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
pandas object格式转float64格式的方法
2018/04/10 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
python配置文件写入过程详解
2019/10/19 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
如何设置Java的运行环境
2013/04/05 面试题
计算s=f(f(-1.4))的值
2014/05/06 面试题
自考毕业自我鉴定范文
2013/10/27 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
给校长的建议书范文
2015/09/14 职场文书