System.Text.Json 可以像 IContractResolver 一樣實現選擇性序列化嗎?
新的 System.Text.Json 命名空間缺少與 Newtonsoft 完全相同的命名空間IContractResolver。但是,.NET 7 引入了合約自訂,它提供了類似的功能。
.NET 7 中的合約自訂
合約自訂允許使用者使用 IJsonTypeInfoResolver 自訂 JSON 序列化元資料介面。透過實作此接口,開發人員可以建立自己的合約解析器來指定要序列化的屬性。
建立自訂合約解析器
建立選擇性合約解析器序列化字段,可以按照以下步驟操作:
定義流暢的擴充方法來修改DefaultJsonTypeInfoResolver:
public static DefaultJsonTypeInfoResolver SerializeSelectedFields(this DefaultJsonTypeInfoResolver resolver, IEnumerable<string> membersToSerialize);
在JsonSerializerOptions 中設定 TypeInfoResolver:
var options = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() .SerializeSelectedFields("FirstName,Email,Id"), ... };
範例
以下程式碼示範如何使用合約自訂有選擇地序列化「FirstName」、「Email」和「Id」屬性:
var options = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() .SerializeSelectedFields("FirstName,Email,Id"), ... }; // Serialize the object var json = JsonSerializer.Serialize(obj, options);
附加說明
以上是System.Text.Json能否像Newtonsoft的IContractResolver一樣實現選擇性序列化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!