首頁 >後端開發 >C++ >System.Text.Json能否像Newtonsoft的IContractResolver一樣實現選擇性序列化?

System.Text.Json能否像Newtonsoft的IContractResolver一樣實現選擇性序列化?

DDD
DDD原創
2025-01-04 07:57:41804瀏覽

Can System.Text.Json Achieve Selective Serialization Like Newtonsoft's IContractResolver?

System.Text.Json 可以像 IContractResolver 一樣實現選擇性序列化嗎?

新的 System.Text.Json 命名空間缺少與 Newtonsoft 完全相同的命名空間IContractResolver。但是,.NET 7 引入了合約自訂,它提供了類似的功能。

.NET 7 中的合約自訂

合約自訂允許使用者使用 IJsonTypeInfoResolver 自訂 JSON 序列化元資料介面。透過實作此接口,開發人員可以建立自己的合約解析器來指定要序列化的屬性。

建立自訂合約解析器

建立選擇性合約解析器序列化字段,可以按照以下步驟操作:

  1. 定義流暢的擴充方法來修改DefaultJsonTypeInfoResolver:

    public static DefaultJsonTypeInfoResolver SerializeSelectedFields(this DefaultJsonTypeInfoResolver resolver, IEnumerable<string> membersToSerialize);
  2. 在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 預設區分大小寫,因此您可能需要區分大小寫來匹配屬性名稱。

以上是System.Text.Json能否像Newtonsoft的IContractResolver一樣實現選擇性序列化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn