写点什么

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

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

关注

评论

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

架构师训练营 -week09-总结

大刘

极客大学架构师训练营

智变的八个瞬间,京东智联云化“?”为“!”

脑极体

MySQL中的锁机制

AI乔治

Java MySQL 架构 线程 锁机制

阿里P8以hashmap讲解如何学习jdk源码,还不学习

小Q

Java 学习 源码 jdk mybatis

11.11 应对海量访问的网络基石 京东智联云自研交换机发展之路

京东科技开发者

运维 网络 交换机

数字货币引发的金融变革

CECBC

数字化时代

会装虚拟机,删库不用跑

MySQL从删库到跑路

虚拟机 virtualbox

vue项目实战经验汇总

徐小夕

Java 面试 Vue 大前端 Vue3

《网络是怎样连接的》PDF下载

计算机与AI

网络

面经手册 · 第18篇《AQS 共享锁,Semaphore、CountDownLatch,听说数据库连接池可以用到!》

小傅哥

Java 并发编程 共享锁 Semaphore 信号量

SQL数据库:窗口函数

正向成长

窗口函数

新工业化如何实现?今年的信息化百人会中藏着“懂行”密码

脑极体

Nginx-技术专题-技术介绍

码界西柚

什么是云服务?

anyRTC开发者

音视频 WebRTC 云服务 RTC

CSS 排版与正常流 —— 重学CSS

三钻

CSS 排版

前嗅教你大数据——什么是代理IP?

前嗅大数据

爬虫 数据采集 静态IP 代理IP 动态IP

读谱对吉他手来说重要吗?试试它提升你的读谱效率

奈奈的杂社

学习 编曲 打谱

【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!

冰河

MySQL 数据库 性能优化 数据安全 分布式数据储存

【薪火计划】03 - 从错误中认识到管理

码字与律动

管理

Redis 持久化之 RDB 与 AOF 详解

AI乔治

Java 架构 redis持久化 redia

高承实:区块链的工业革命带来了什么?

CECBC

区块链 分布式

注册中心原理剖析

石刻掌纹

我真的尽力了,最经典Redis面试14题,没时间复习就看这个吧

小Q

redis 学习 编程 架构 面试

Springboot过滤器和拦截器详解及使用场景

AI乔治

Java spring 架构 Spring Boot

甲方日常53

句子

工作 随笔杂谈 日常

Dubbo 接口,导出 Markdown ,这些功能 DocView 现在都有了!

程序员小航

markdown idea插件 IntelliJ IDEA 文档生成 Doc View

MySQL从库维护经验分享

Simon

MySQL 主从复制

Glide.with(view)挂在了谁的生命周期上

mengxn

生命周期 Glide Activity Fragment

在Codurance是如何面试技术人员的

sherlockq

面试 TDD

国网浙江建设公司推进“信用基建+区块链”建设

CECBC

区块链 国网 基建

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