在System.Text.Json 中自訂序列化合約
新的System.Text.Json API 提供了自訂序列化合約的功能,提供功能類似Newtonsoft 的IContractResolver。
Contract .NET 7 中的自訂
在 .NET 7 中,可以透過 IJsonTypeInfoResolver 介面進行協定自訂。此介面允許開發人員建立自訂解析器,這些解析器會傳回指定類型和 JsonSerializerOptions 組合的已配置 JsonTypeInfo 實例。
建立自訂解析器
建立自訂解析器的一種方法是子類化 DefaultJsonTypeInfoResolver 並重寫 GetTypeInfo(Type, JsonSerializerOptions) 方法。或者,您可以新增 Action
範例:選擇性欄位序列化
複製 System.Text 中 SelectiveSerializer 類別的功能。 Json,您可以使用類似以下的修飾符操作以下:
resolver.Modifiers.Add(typeInfo => { if (typeInfo.Kind == JsonTypeInfoKind.Object) { foreach (var property in typeInfo.Properties) { if (property.GetMemberName() is {} name && !membersToSerializeSet.Contains(name)) property.ShouldSerialize = static (obj, value) => false; } } });
此修飾符檢查與指定欄位名稱相符的屬性,並將其ShouldSerialize 屬性設為false 以將其排除在序列化之外。
設定解析器
建立自訂解析器後,可以透過JsonSerializerOptions.TypeInfoResolver 屬性。例如:
var options = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() .SerializeSelectedFields("FirstName,Email,Id"), // Other options as required };
附加說明
以上是如何在 System.Text.Json 中自訂序列化合約?的詳細內容。更多資訊請關注PHP中文網其他相關文章!