QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

  • 2014-08-18
  • 本文字数:1172 字

    阅读完需:约 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。看一下这个测试能够帮助你更好地理解该特性,以及它所支持的各种用例。

  • 整合依赖注入框架 – 如果你指定了如何在运行时还原某个对象的机制,你就能够直接反序列化接口或抽象类型,就像你在使用 Autofac Ninject 等依赖注入等框架时所做的一样。你所需的仅是在序列化器中定义一个继承自 DefaultContractResolver 的 resolver 类即可。

  • 一些 F#专有的特性 – 支持区分归并、F#集合、F#列表、序列、set 和 map。对于新的不可变集合来说,如果某个泛型 T 的集合定义了一个接受 IEnumerable的构造函数,那么 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

2014-08-18 01:502096
用户头像

发布了 428 篇内容, 共 180.6 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

诸多老牌数据仓库厂商当前,Snowflake如何创近12年最大IPO金额

华为云开发者联盟

数据仓库 数据 存储

CloudQuery v1.1.1 修复版本发布

BinTools图尔兹

数据库 sql 安全 工具软件

第12周作业

Vincent

极客时间 极客大学

Java Reference核心原理分析

AI乔治

Java 架构 JVM 性能调优

从分布式到微服务成长手册,助我面试跳槽斩获字节Offer

Java架构追梦

Java 学习 架构 面试 微服务

架构师训练营 - 第 4周课后作业(1 期)

Pudding

让AI人才在产业界闪闪发光:百度之星的“神奇滤镜”是怎样炼成的?

脑极体

架构师的成长之路

华章IT

CTO 架构师 架构师之道

关注你自己,如同篮球巨星一样,让身体最佳化,持续投入最爱的事情。

叶小鍵

健康 科普 王立铭 肥胖

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(三)

陈泽云

人工智能 大数据 计算机网络 操作系统 网络

GO 类型接口及反射间的转换

superman

Go 语言

“一个APP竟然可以适配这么多设备?!”《优酷响应式布局技术全解析》开放下载

破绽

阿里巴巴 阿里云 开发者 优酷 电子书

第12周学习总结

Vincent

极客时间 极客大学

据说99.99%的人都会答错的类加载的问题

AI乔治

Java 架构 JVM 类加载 性能调优

详细分析定制企业应用的价格

Learun

敏捷开发 快速开发 软件架构

京东智联云MySQL数据库如何保障数据的可靠性?

京东科技开发者

MySQL 数据库

5G时代音视频开发王器:WebRTC

华章IT

flutter 音视频 WebRTC React Native

“区块链×多方计算”解决众多难题 将成区块链应用新场景

CECBC

区块链 数据融合

websocket 是怎么连接的

程序员与厨子

nginx 网络 HTTP websocket

架构训练营 - 第4周课后作业 - 学习总结

Pudding

有了容器为什么kubernetes还需要Pod?

架构师修行之路

分布式 微服务 pod kubernete

甲方日常 33

句子

工作 随笔杂谈 日常

微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

AI乔治

Java 架构 微服务 ,docker

技术实践丨GaussDB(DWS)运维管理功能“升级”的原理和使用

华为云开发者联盟

运维 数据 集群

分布式系统设计理念这么难学?

架构师修行之路

分布式 微服务

十七、深入Python异常处理

刘润森

Python

云计算简史(上)- 15分钟读完15年

明道云

考研须知

时间是一个人最好的证明

考研

“区块链技术创新要植根市场”

CECBC

金融科技 信息安全

第19届亚运会门票采用区块链技术防伪

CECBC

区块链技术 防伪 溯源

NET-Core中的配置文件操作

为体验更多

C# .net .net core ASP.NET Core

Json.NET更新:对合并对象、依赖注入、F#以及JSONPath的支持_.NET_Roopesh Shenoy_InfoQ精选文章