ホームページ >バックエンド開発 >C++ >.NET で逆シリアル化中に既知および未知の JSON フィールドを処理するにはどうすればよいですか?

.NET で逆シリアル化中に既知および未知の JSON フィールドを処理するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-18 09:02:09569ブラウズ

How Can I Handle Known and Unknown JSON Fields During Deserialization in .NET?

.NET 逆シリアル化での JSON の既知および未知のフィールドの処理

JSON データを処理するとき、既知のフィールドと未知のフィールドの両方が存在する状況に遭遇することがよくあります。既知のフィールドはクラス内の特定のプロパティにマップできますが、未知のフィールドはデータ損失を避けるために特別な処理が必要です。

JSON .NET のカスタム コントラクト パーサーの使用

不明なフィールドを管理する 1 つの方法は、JSON .NET のカスタム コントラクト パーサーを利用することです。ただし、これを達成するのは難しい場合があります。

DataContract シリアライザーの制限事項

DataContract シリアライザーは逆シリアル化をオーバーライドできないため、このケースには適していません。

動的オブジェクトとシリアル化

動的オブジェクトへのシリアル化と逆シリアル化は解決策になりますが、これは面倒なプロセスであり、後処理が必要です。

DynamicObject の継承

シリアライザーはリフレクションに依存しており、動的オブジェクトのカスタム メソッドを呼び出さないため、DynamicObject クラスから継承しても問題は解決しません。

より簡単な解決策: JsonExtensionDataAttribute

複雑な手法を使用する代わりに、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。