【AICon】硅谷视野+中国实践,汇聚全球顶尖技术的 AI 科技盛会 >>> 了解详情
写点什么

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:501916
用户头像

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

关注

评论

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

第八周作业

大肚皮狒狒

Java并发编程基础(上)

FunTester

想设计一个高并发的消息中间件前,先熟悉一下这些知识点

华为云开发者联盟

开发 中间件 分布式架构 华为云 华为云开发者联盟

网安训练营 毕业总结

李某人

第七周作业

大肚皮狒狒

开工大吉!秀一下我们假期の战绩

王中阳Go

Java Go 程序人生 面试题 Go 面试题 面经 后端 大厂

VMware Workstation 17安装教程:轻松构建虚拟机

小魏写代码

掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验

HMS Core

HarmonyOS

一文搞懂设计模式—观察者模式

Java随想录

Java 设计模式

快速部署MES源码/万界星空科技开源MES

万界星空科技

开源 mes 开源mes 万界星空科技

作业帮 x TiDB丨多元化海量数据业务的支撑

PingCAP

数据库 TiDB

Django数据库类库MySQLdb使用详解

百度搜索:蓝易云

数据库 django 运维 云服务器 mysqldb

教你用Rust实现Smpp协议

华为云开发者联盟

rust 开发 华为云 华为云开发者联盟 华为云短信服务

STL算法大全

百度搜索:蓝易云

c++ 云计算 Linux 运维 云服务器

听 GPT 讲 client-go 源代码 (3)

fliter

第二十二周作业

大肚皮狒狒

第八周作业

大肚皮狒狒

糟糕,被SimpleDateFormat坑到啦!| 京东云技术团队

京东科技开发者

vue项目中package.json的个人见解

百度搜索:蓝易云

Linux 运维 Vue 云服务器 package.json

深入理解HTTP请求的五个要点

百度搜索:蓝易云

云计算 Linux 运维 HTTP 云服务器

0-overlay和underlay,这两种容器网络你分得清吗

华为云开发者联盟

容器 开发 华为云 华为云开发者联盟 云容器网络

使用 Coze 搭建 TiDB 助手

PingCAP

数据库 TiDB

教育创新:全国高校软件测试峰会聚焦技术前沿

测吧(北京)科技有限公司

测试

fastposter v2.18.0 一分钟完成开发海报-云服务来袭

物有本末

海报编辑器 海报生成 海报小程序

华为云GES助力九洲平台:探索确定性运维的新实践

华为云开发者联盟

开发 华为云 华为云GES 华为云开发者联盟 确定性运维

4 月 9 日至 4 月 10 日,Hack.Summit() 2024 首聚香江

TechubNews

php所有函数总结

百度搜索:蓝易云

Linux 运维 前端 HTTP 云服务器

选择轻量级低代码+定制,轻松打造小程序平台

天津汇柏科技有限公司

低代码开发 小程序开发

uniapp的u-album组件自定义删除功能

百度搜索:蓝易云

uni-app Linux 运维 云服务器 album

听 GPT 讲 client-go 源代码 (4)

fliter

4K Star,强大的实时监控告警系统

GitHub指北

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