必赢56net手机版_www.56.net_56net亚洲必赢官网欢迎您!!!

Core3发布Json API

来源:https://www.wzchild.com 作者:电脑 人气:106 发布时间:2019-09-17
摘要:我们给DNC3(.NET Core 3)上了一个新包,叫做System.Text.Json(点我下载),支持读写器,DOM(文档对象模型),和序列化,在这篇博文里,我会告诉大家为什么要做这个,这个包怎样工作,你

  我们给DNC3(.NET Core 3)上了一个新包,叫做System.Text.Json(点我下载),支持读写器,DOM(文档对象模型),和序列化,在这篇博文里,我会告诉大家为什么要做这个,这个包怎样工作,你们可以怎么去用它。

  Json已经成为了所有现代.NET应用的重要部分,在许多情况下超过了XML的使用数量,但是.NET还没有一个很好的内建JSON处理方案,在此之前我们一直依靠Json.NET,来为.NET生态服务。

  高性能的JSON API。我们需要一批新的Json api,用SpanT达成高性能,直接处理UTF-8编码而不用转码成UTF-16的字串。两方面对ASP.DNC都很重要,因为吞吐量非常关键。我们考虑过把代码提交给Json.NET,但是既要达成我们所要的性能,又不破坏Json.NET的客户使用体验几乎是不可能的。用了System.Text.Json,视方案不同可以得到1.3-5倍的性能加速(下面有更多细节),相信还能压榨出更多性能。

  从ASP.DNC中移除Json.NET的依赖。 现在ASP.DNC依赖Json.NET,这样ASP.DNC和Json.NET的耦合不仅高,还使得Json.NET的版本被平台所限制。但是Json.NET经常更新,应用开发者经常想要——或者必须使用特定的版本,因此我们打算从ASP.DNC3移除Json.NET的依赖,这样客户便可以选择适用版本,不需要担心意外崩掉后台。

  为Json.NET提供了一个ASP.DNC的集成包。Json.NET基本变成了.NET处理json的瑞士军刀。这玩意提供了很多选项和工具,允许客户便利地处理json需求,我们不想让客户体验打折(原文compromise直译折中),举个蛎子,调用AddJsonOptions扩展方法即可在ASP.DNC中配置Json序列化。因此,我们准备对ASP.DNC提供一个Json.NET集成包,开发者可以选择安装,这样他们就可以在新版本中继续使用Json.NET的好处。我们还需要确保有合适的扩展点,这样其他组织也可以为他们的Json库提供类似的集成包。

  要查看更多细节和这一举措跟Json.NET的关系,可以查看我们在去年10月做的讨论。

  默认情况下,我们提供缩小的Json,如果你想提供些人类可读的东西,可以向序列化器传入一个JsonSerializerOptions实例,还能配置其他设置,例如处理评论,尾随逗号和命名策略。

  你也可以用自定义特性(虽然我更喜欢叫注解)来控制序列化行为,例如忽视Json中的属性并指定属性名:

  目下还不支持F#的特殊行为(例如discriminated unions(可区分联合)和record types(记录类型)),以后会加。

  有时候你不想反序列化json负载,但是还想将其内容结构化,比方说我们有个温度集合,打算平均一下星期一的温度:

  接受或返回对象负载时,ASP.DNC中的大部分Json使用都靠自动序列化,换句话说你的绝大多数应用代码不知道ASP.DNC用的是哪个Json库,这样切换很容易。

  记住这些测试是基于预览版的,正式版的数据很可能大不相同,我们仍然在修改会影响性能的默认行为(比如大小写敏感),注意这些都是微测试,你实际能得到的好处可能会大不一样,因此如果你很在意性能,确保你自己的检测能代表你的负载,如果你遇到希望我们进一步优化的方案,请提交bug。

  我们写了个生成数据的ASP.DNC应用,从MVC控制器序列化和反序列化,然后康康负载大小和测量结果(RPS越高越好):

  对于最普遍的负载大小,MVC的System.Text.Json在输入和输出时以更小的内存占用达到了20%的吞吐量增加。

  DNC3正式版会带上System.Text.Json API,属于DNC内建的Json支持,包括读写器,只读DOM,序列化和反序列化。一开始的目标是性能,一般可以有超过Json.NET2倍的性能,但是这取决于你的方案和负载,因此需要确保你的重点。

https://www.wzchild.com/diannao/305.html

频道精选

最火资讯