ホームページ > バックエンド開発 > C++ > Json.NET の JObject.Parse での日付の逆シリアル化を防ぐ方法は?

Json.NET の JObject.Parse での日付の逆シリアル化を防ぐ方法は?

Mary-Kate Olsen
リリース: 2024-12-31 02:34:09
オリジナル
682 人が閲覧しました

How to Prevent Date Deserialization in Json.NET's JObject.Parse?

JObject.Parse を使用した Json.NET での日付逆シリアル化の無効化

人気のある JSON 処理ライブラリである Json.NET は、柔軟な逆シリアル化オプションを提供します。デフォルトでは、DateTime 値を持つプロパティを .NET DateTime オブジェクトに変換しようとします。ただし、特定のシナリオでは、この動作は望ましくない場合があります。

次のコードを考えてみましょう:

string s = "2012-08-08T01:54:45.3042880+00:00";

JObject j1 = JObject.FromObject(new { time = s });

Object o = j1["time"];
ログイン後にコピー

この例では、o は元の日付/時刻値を含む文字列です。ただし、JSON 文字列が別のプログラムに転送され、JObject.Parse を使用して解析し直されると、結果は変わります。

JObject j2 = JObject.Parse(j1.ToString());

Object o2 = j2["time"];
ログイン後にコピー

o2 は、異なる表現を持つ Date オブジェクトです。この不一致は、元の値を保持する必要がある状況では問題となる可能性があります。

解決策

JObject.Parse の使用時に日付の逆シリアル化を無効にするために、Json.NET は代替アプローチ。 Parse を直接使用する代わりに、JsonReader を使用して解析オプションを構成できます。

using(JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()))) {
    reader.DateParseHandling = DateParseHandling.None;
    JObject o = JObject.Load(reader);
}
ログイン後にコピー

JSON を JObject にロードする前に DateParseHandling を None に設定すると、日時値が文字列として扱われ、その値が保持されます。

このソリューションは、Parse によって呼び出される JObject の内部 Load メソッドに依存していることに注意してください。このアプローチでは、Parse のデフォルトの動作と比較して、逆シリアル化プロセスをより詳細に制御できます。

以上がJson.NET の JObject.Parse での日付の逆シリアル化を防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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