JSON データを処理すると、既知のフィールドと未知のフィールドを含む混合結果が頻繁に発生します。これにより、データを固定のプロパティ セットを持つクラスに逆シリアル化するときに問題が発生する可能性があります。
質問: 既知のフィールドと未知のフィールドを含む JSON 結果が与えられた場合、それを既知のフィールドのプロパティを含み、未知のフィールドを処理できるクラスに逆シリアル化するにはどうすればよいですか?
考えられる解決策:
JSON.NET のカスタム コントラクト パーサーの使用: このソリューションでは、不明なフィールドを処理するためにカスタム コントラクト パーサーが必要です。ただし、これを実現する方法を理解するのは難しい場合があります。
データ コントラクト シリアライザー: データ コントラクト シリアライザーはシリアル化と逆シリアル化のイベントを提供しますが、特定のメソッドのオーバーライドのみをサポートし、フィールド処理の完全な制御は提供しません。
動的オブジェクトとカスタム マッピングへのシリアル化: このアプローチには、JSON を動的オブジェクトに逆シリアル化し、未知のフィールドを手動でマッピングすることが含まれます。可能ではありますが、おそらく多くの作業が必要になります。
DynamicObject から継承: 逆シリアル化にリフレクションに依存するシリアライザーは、DynamicObject から継承するクラスを使用する場合、tryGetMember メソッドと trySetMember メソッドの呼び出しに失敗することがあります。
カスタム シリアライザーで RESTSharp を使用する: RESTSharp でこの問題を解決するには、カスタム シリアライザーを使用する必要があります。
JsonExtensionDataAttribute (JSON.NET v5) を使用したより良いソリューション:
JSON.NET バージョン 5 では、未知のフィールドをより簡単かつ効率的に処理する方法を提供する JsonExtensionDataAttribute が導入されました。
コード例:
public class Product { [JsonProperty("id")] public string Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonExtensionData] public Dictionary<string, JToken> ExtraFields { get; set; } }
この例では、ExtraFields ディクショナリに、JSON 結果内の不明なフィールドのキーと値のペアが含まれます。
結論:
JSON.NET バージョン 5 の JsonExtensionDataAttribute を活用することで、開発者は JSON 結果の既知および未知のフィールドを効率的に管理し、ExtraFields ディクショナリを通じて未知のフィールドにアクセスできます。
以上が既知フィールドと未知フィールドの両方を含む JSON を C# クラスに逆シリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。