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