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 サイトの他の関連記事を参照してください。