BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Json.NET更新:对合并对象、依赖注入、F#以及JSONPath的支持

| 作者 Roopesh Shenoy 关注 0 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2014年8月19日. 估计阅读时间: 4 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

Json.NET 6.0今年一共发布了4个版本的更新,其中最近一次发生在上周。经过这几次更新,加入了一些新的特性,包括一些F#专有的特性,对JSONPath查询的支持,与依赖注入框架的集成,支持合并JSON对象,以及其它更多特性。

.NET框架本身自带了一些序列化器,包括数据契约(Data Contract)JSON序列化器和JavaScriptSerializer,不过在特性与性能上还是存在着提升空间。JSON.NET弥补了这部分的不足,它成为了在.NET社区中非常流行的一款开源替代产品。JSON.NET带来了一些新的特性,例如LINQ-to-JSON、支持BSON、支持匿名类型、支持流行的ORM框架(EF和NHibernate)等等,这些是.NET框架本身所不具备的功能。不仅如此,它在性能上的表现也更加出色。(请对照一下这份特性比较与性能数据详细分析

Json.NET在今年所发布的一些重要特性进一步提高了它的功能:

  • JSON合并 – 允许你将一个JSON对象或数组合并入另一个对象或数组中。

    这一功能类似于jQuery中的extend方法,但它还支持递归,并且在处理数组时提供了更多选择。在合并数组(包括那些内嵌在对象中的数组)时,你可以指定是按位置进行连结或是进行归并(union),或者是完全替换。

    合并功能同样支持LINQ-to-JSON。看一下这个测试能够帮助你更好地理解该特性,以及它所支持的各种用例。

  • 整合依赖注入框架 – 如果你指定了如何在运行时还原某个对象的机制,你就能够直接反序列化接口或抽象类型,就像你在使用AutofacNinject等依赖注入等框架时所做的一样。你所需的仅是在序列化器中定义一个继承自DefaultContractResolver的resolver类即可。
  • 一些F#专有的特性 – 支持区分归并、F#集合、F#列表、序列、set和map。对于新的不可变集合来说,如果某个泛型T的集合定义了一个接受IEnumerable<T>的构造函数,那么Json.NET能够做到反序列化至该种集合类型。
  • 能够处理元数据属性,而无须保证JSON对象的属性顺序。Json.NET的某些特性需要使用元数据,例如维持类型或引用。为了使这些特性正常工作,它要求这些元数据必须排列在其它属性之前。可以使用一个名为MetadataPropertyHandling.ReadAhead的设置来打开这一功能,代价是在内存占用与速度上略有损失。
  • JSONPath查询的完整支持。这一功能类似于XPath,它可以用于对JSON数据进行浏览。如果你仅需要某个特定的值,那么在不必反序列化整个JSON对象的情况下就可以实现这一点。

其它一些有趣的特性还包括反序列化嵌套的DataTable对象,以及嵌入DataTable对象中的数组,支持JSON文件中的单行注释,支持Windows Phone 8.1和其它一些特性。更多细节请查看James Newton-King所发布的帖子

另一个值得关注的高性能.NET第三方序列化工具是ServiceStack.Text现如今它是一种商业的开源软件)。

查看英文原文:Json.NET Updates: Merge, Dependency Injection, F# and JSONPath Support

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT