docfx组件介绍--YamlSerialization
2016-02-16 22:44
316 查看
在docfx中把元数据以yaml的形式保存,在metadata阶段会序列化数据到yaml文件中,在build阶段又需要从yaml文件反序列化出来。在使用过程中,意外发现yamldotnet在处理大量强类型数据时性能奇差,将yaml反序列化为弱类型后,再序列化为json,再从json反序列化为强类型,这样看起来超级折腾的3步走竟然比yaml直接反序列化为强类型的性能足足提高了3倍。。。无奈之下,我们开始尝试自己写个序列化器,于是就有了Microsoft.DocAsCode.YamlSerialization这个project。不过这个project与yamldotnet有以下不同:
这个project依赖yamldotnet,直接使用yamldotnet的底层的yaml格式的读写
为了优化性能,使用了emit,所以导致下面两个副作用:
只能序列化public的类型和属性,而yamldotnet可以处理non-public的类型和数学
由于emit的特性,在大量数据时性能好,而仅有少量数据时反而性能差
修复了几个序列化反序列化时碰到的问题:
序列化时,将字符串"true",强制序列化为"true",而不是yamldotnet的true
反序列化弱类型时,将true反序列化为boolean类型,而"true"为字符串类型,而yamldotnet均作为字符串类型
正确序列化和反序列化单引号或双引号开头的字符串
增加可扩展属性,也就是json.net里面类似JsonExtensionData
不过为了简化代码的复杂性,不能像json.net那样发现属性为null是自动new一个对象
可以指定可扩展属性的前缀
这个project依赖yamldotnet,直接使用yamldotnet的底层的yaml格式的读写
为了优化性能,使用了emit,所以导致下面两个副作用:
只能序列化public的类型和属性,而yamldotnet可以处理non-public的类型和数学
由于emit的特性,在大量数据时性能好,而仅有少量数据时反而性能差
修复了几个序列化反序列化时碰到的问题:
序列化时,将字符串"true",强制序列化为"true",而不是yamldotnet的true
反序列化弱类型时,将true反序列化为boolean类型,而"true"为字符串类型,而yamldotnet均作为字符串类型
正确序列化和反序列化单引号或双引号开头的字符串
增加可扩展属性,也就是json.net里面类似JsonExtensionData
不过为了简化代码的复杂性,不能像json.net那样发现属性为null是自动new一个对象
可以指定可扩展属性的前缀
相关文章推荐
- java设计模式
- Stunnel使用
- TabHost的使用及原理
- 在WampServer环境下安装Drupal框架
- HDU 3435 A new Graph Game(二分图最优匹配:有向环覆盖)
- LAN 局域网通讯软件 中期报告
- Linux 守护进程
- 总结oninput、onchange与onpropertychange事件的用法和区别
- 用AT89S52控制单个舵机并且三段数码管显示转的角度
- (java) Pow(x, n)
- DuiVision设计器预览版
- MySQL root密码找回
- NeHe02课 多边形
- codeforce626C.Block Towers(二分)
- 字符串处理
- 安卓SD卡读写、String和byte转换
- java学习日记——基本操作02
- 使用CSDN博客的第一天
- Java中的@Override的作用
- canOpenURL: failed for URL: "weixin://app/wx 问题解决方式