博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docfx组件介绍--YamlSerialization
阅读量:7240 次
发布时间:2019-06-29

本文共 718 字,大约阅读时间需要 2 分钟。

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

 

  

  

转载地址:http://vwfbm.baihongyu.com/

你可能感兴趣的文章
[NOIP2013] 提高组 洛谷P1967 货车运输
查看>>
E: Unable to correct problems, you have held broken packages-之apt-get 下载报依赖问题
查看>>
递归函数
查看>>
浏览器 UserAgent 相关知识整理
查看>>
18、配置嵌入式servlet容器(2)
查看>>
URL重写
查看>>
移植spdylay到libcurl
查看>>
Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence【构造/GCD】
查看>>
求多个区间合并后区间大小的巧妙解决方法【差分】
查看>>
转载:AAC编解码概述
查看>>
POJ 3370 Halloween treats( 鸽巢原理简单题 )
查看>>
STL vector list deque区别与实现(总结)
查看>>
讨论76 怎么查一下我机器的内存?AIX环境
查看>>
001设计模式 -- 策略模式
查看>>
Java中的基本数据类型
查看>>
wordpress 插件推荐
查看>>
对于[]()+!的研究
查看>>
jquery中对于为一组标签赋予点击事件
查看>>
文档模型(JSON)使用介绍
查看>>
实验2 柱状图生成
查看>>