Json.NET更新:對合并對象、依賴注入、F#以及JSONPath的支持
英文原文:Json.NET Updates: Merge, Dependency Injection, F# and JSONPath Support
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。看一下這個測試能夠幫助你更好地理解該特性,以及它所支持的各種用例。
</li> - 整合依賴注入框架 – 如果你指定了如何在運行時還原某個對象的機制,你就能夠直接反序列化接口或抽象類型,就像你在使用 Autofac 或 Ninject 等依賴注入等框架時所做的一樣。你所需的僅是在序列化器中定義一個繼承自 DefaultContractResolver 的 resolver 類即可。
- 一些F#專有的特性 – 支持區分歸并、F#集合、F#列表、序列、set 和 map。對于新的不可變集合來說,如果某個泛型T的集合定義了一個接受 IEnumerable<T>的構造函數,那么 Json.NET 能夠做到反序列化至該種集合類型。
- 能夠處理元數據屬性,而無須保證 JSON 對象的屬性順序。Json.NET 的某些特性需要使用元數據,例如維持類型或引用。為了使這些特性正常工作,它要求這些元數據必須排列在其它屬性之前。可以使用一個名為 MetadataPropertyHandling.ReadAhead 的設置來打開這一功能,代價是在內存占用與速度上略有損失。
- 對 JSONPath 查詢的完整支持。這一功能類似于 XPath,它可以用于對 JSON 數據進行瀏覽。如果你僅需要某個特定的值,那么在不必反序列化整個 JSON 對象的情況下就可以實現這一點。 </ul>
其它一些有趣的特性還包括反序列化嵌套的 DataTable 對象,以及嵌入 DataTable 對象中的數組,支持 JSON 文件中的單行注釋,支持 Windows Phone 8.1 和其它一些特性。更多細節請查看 James Newton-King 所發布的帖子。
另一個值得關注的高性能 .NET 第三方序列化工具是 ServiceStack.Text(現如今它是一種商業的開源軟件)。
<span id="shareA4" class="fl">
</span>