写点什么

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

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

关注

评论

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

安全419《高级威胁检测与响应解决方案》系列访谈——未来智安(XDR SEC)篇

未来智安XDR SEC

网络安全 威胁检测 XDR扩展威胁检测响应

Flink Collector Output 接口源码解析

JasonLee实时计算

flink 源码

计算机网络——物理层设备

StackOverflow

编程 计算机网络 9月月更

史上最详细Ajax学习笔记

楠羽

笔记 ajax数据 9月月更

讲讲 SaaS 平台的多租户怎么设计

产品海豚湾

产品经理 多租户 产品设计与思考 SaaS平台 9月月更

[SSM]前后台协议联调②

十八岁讨厌编程

Java 后端开发 9月月更

英特尔与 AMD 谁更强?

雨果

英特尔 AMD

[Javaweb]JSON

十八岁讨厌编程

javaWeb 后端开发 9月月更

常见监控分类概述

穿过生命散发芬芳

监控 9月月更

什么是混合云?与公有云、私有云有啥区别?

wljslmz

云计算 公有云 私有云 混合云 9月月更

【字符串函数内功修炼】strncpy + strncat + strncmp(二)

Albert Edison

C语言 9月月更 strncpy strncat strncmp

上海交通大学OpenHarmony技术俱乐部正式揭牌成立

极客天地

OceanBase 数据库内核实战赛「推荐官」招募令发布,让身边的优秀选手C位出道!

OceanBase 数据库

OceanBase本周活动|从0到1数据库内核实战教程;对话ACE第五期;Meetup广州站

OceanBase 数据库

每日算法刷题Day13-在O(1)时间删除链表结点、合并两个排序的链表、把字符串转换成整数

timerring

算法题 9月月更

在线帮助中心-帮助客户更快上手使用你的产品

Baklib

帮助文档

JS-内置对象API-Array(数组)-(一)-改变原数组的API-篇

Sam9029

JavaScript 前端 9月月更

前端食堂技术周刊第 53 期:React Router 6.4、VS Code August 2022、2022 Google 谷歌开发者大会、Meta 开源 MemLab、Vue.js 技术内幕

童欧巴

Vue vscode React

C++学习---_IO_lock_t的源码学习

桑榆

c++ 源码阅读 9月月更

Drug X跨越鸿沟:一个生物科学家的新药研发跋涉记

脑极体

[SSM]前后台协议联调①

十八岁讨厌编程

Java 后端开发 9月月更

ShareSDK 开发过程中常见问题

MobTech袤博科技

ios android sdk

轻量化的灰度发布实践技术方案

Speedoooo

灰度发布 ab测试 轻量化

FinOps能力成熟度模型启动,灵雀云助力云原生降本增效标准制定

York

云计算 云原生 能力成熟度模型 降本增效 FinOps

跟着卷卷龙一起学Camera--Demosaic

卷卷龙

ISP 9月月更

PC端小程序引擎,或许不就未来能解决桌面应用兼容性

Speedoooo

小程序 桌面开发 桌面端 桌面应用

互联网公司员工职级、研发效能度量、OKR与绩效考核

laofo

DevOps cicd 研发效能 持续交付

云渲染和传统渲染农场有什么区别?

Renderbus瑞云渲染农场

云渲染 云渲染农场 渲染农场 Renderbus瑞云渲染

ESP32-C3入门教程 基础篇(一、ADC采样)

矜辰所致

ESP32-C3 9月月更 ADC采样

ESP32-C3入门教程 基础篇(二、GPIO中断、按键驱动测试)

矜辰所致

GPIO ESP32-C3 按键驱动 9月月更

Flink计算框架概述

阿泽🧸

9月月更 Filnk

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