ホームページ > バックエンド開発 > C++ > System.Text.Json は Newtonsoft の IContractResolver のような選択的シリアル化を実現できますか?

System.Text.Json は Newtonsoft の IContractResolver のような選択的シリアル化を実現できますか?

DDD
リリース: 2025-01-04 07:57:41
オリジナル
828 人が閲覧しました

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. Fluent 拡張機能を定義するDefaultJsonTypeInfoResolver を変更するメソッド:

    public static DefaultJsonTypeInfoResolver SerializeSelectedFields(this DefaultJsonTypeInfoResolver resolver, IEnumerable<string> membersToSerialize);
    ログイン後にコピー
  2. で TypeInfoResolver を設定します。 JsonSerializerOptions:

    var options = new JsonSerializerOptions
    {
        TypeInfoResolver = new DefaultJsonTypeInfoResolver()
            .SerializeSelectedFields("FirstName,Email,Id"),
        ...
    };
    ログイン後にコピー

Example

次のコードは、「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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート