在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一个对象
    • 可以指定可扩展属性的前缀

  

  

最新文章

  1. C#开发微信门户及应用(36)--微信卡劵管理的封装操作
  2. linux定时任务crond export变量问题
  3. <head></head>
  4. MVVM开源框架Knot.js 教程2 - 大幅改变前端框架开发体验的Debugger
  5. JAVA中生成Excel方法
  6. c#中格式化导出Excel数据
  7. phpDesigner 工具快捷键巧用
  8. Django Web开发【2】Django入门
  9. JAVA学习第三十六课(经常使用对象API)— Set集合:HashSet集合演示
  10. Linux下安装配置词典GoldenDict
  11. Android 系统搜索框(有浏览记录)
  12. 通讯录C++console application
  13. webpack安裝和卸載
  14. HAOI 2018 染色(容斥+NTT)
  15. C#异常--System.IO.FileLoadException:“混合模式程序集是针对“v2.0.50727”版的运行时生成的错误
  16. AssemblyVersion和AssemblyFileVersion的区别
  17. Innodb独立的undo tablespace
  18. Ubuntu:未找到合法的活动链接
  19. 二叉树(前序,中序,后序,层序)遍历递归与循环的python实现
  20. Ubuntu用户root密码设置

热门文章

  1. iOS tableView右滑显示选择
  2. iOS AutoLayout的用法
  3. ThinkPHP实现对数据库的增删改查
  4. PHP设计模式 迭代器模式
  5. iPhone被盗后续更新二:被换机!已取机!没扣住新机!怎么找新机呢?事发半年后跟进...
  6. Linux如何查看JDK的安装路径
  7. WordPress建站和搭独立博客
  8. MongoDB学习笔记~官方驱动嵌套数组对象的更新
  9. 【转】详细分析Java中断机制
  10. js中的prototype和__proto__