System.Text.Json は IContractResolver のような選択的シリアル化を実装できますか?
新しい System.Text.Json 名前空間には、Newtonsoft の名前空間とまったく同等のものがありません。 IContractResolver。ただし、.NET 7 では同様の機能を提供するコントラクトのカスタマイズが導入されています。
.NET 7 のコントラクトのカスタマイズ
コントラクトのカスタマイズにより、ユーザーは IJsonTypeInfoResolver を使用して JSON シリアル化メタデータをカスタマイズできます。インタフェース。このインターフェイスを実装することで、開発者は独自のコントラクト リゾルバーを作成して、シリアル化するプロパティを指定できます。
カスタム コントラクト リゾルバーの作成
選択的にコントラクト リゾルバーを作成するにはフィールドをシリアル化する場合は、次の手順に従うことができます:
Fluent 拡張機能を定義するDefaultJsonTypeInfoResolver を変更するメソッド:
public static DefaultJsonTypeInfoResolver SerializeSelectedFields(this DefaultJsonTypeInfoResolver resolver, IEnumerable<string> membersToSerialize);
で 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 は Newtonsoft の IContractResolver のような選択的シリアル化を実現できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。