JSON データを処理するとき、既知のフィールドと未知のフィールドの両方が存在する状況に遭遇することがよくあります。既知のフィールドはクラス内の特定のプロパティにマップできますが、未知のフィールドはデータ損失を避けるために特別な処理が必要です。
不明なフィールドを管理する 1 つの方法は、JSON .NET のカスタム コントラクト パーサーを利用することです。ただし、これを達成するのは難しい場合があります。
DataContract シリアライザーは逆シリアル化をオーバーライドできないため、このケースには適していません。
動的オブジェクトへのシリアル化と逆シリアル化は解決策になりますが、これは面倒なプロセスであり、後処理が必要です。
シリアライザーはリフレクションに依存しており、動的オブジェクトのカスタム メソッドを呼び出さないため、DynamicObject クラスから継承しても問題は解決しません。
複雑な手法を使用する代わりに、JSON .NET (バージョン 5.0 以降) の JsonExtensionDataAttribute
を検討してください。この属性を使用すると、不明なフィールドをタイプ IDictionary<string, JToken>
の属性に匿名で保存できます。
<code class="language-csharp">public class Product { public string id { get; set; } public string name { get; set; } [JsonExtensionData] public Dictionary<string, JToken> UnknownFields { get; set; } }</code>
このアプローチを使用すると、JSON データは正常に逆シリアル化され、クラス インスタンスを通じて既知および未知のフィールドにアクセスできるようになります。
以上が.NET で逆シリアル化中に既知および未知の JSON フィールドを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。