これがコードです:
string s = "2012-08-08T01:54:45.3042880+00:00";
JObject j1 = JObject.FromObject(new
{
time=s
});
Object o = j1["time"];
Oが文字列であり、「2012-08-08T01:54:45.3042880 + 00:00」に等しいことを確認できます
次に、j1.ToString()を別のプログラムに転送します。
{
"time": "2012-08-08T01:54:45.3042880+00:00"
}
次に、他のプログラムで、それを解析してJObjectに戻します。
JObject j2 = JObject.Parse(j1.ToString());
Object o2 = j2["time"];
ここで、o2をチェックすると、o2のタイプはDateであり、o2.ToString()は8/7/2012 9:54:45 PMです。
私の質問は:
JObject.Parseの日付の逆シリアル化を無効にし、そのままの文字列を取得する方法はありますか?
前もって感謝します
object
からJObject
への解析時には、日付の処理方法を指示するJsonSerializer
を指定できます。
JObject.FromObject(new { time = s },
new JsonSerializer {
DateParseHandling = DateParseHandling.None
});
残念ながら、Parse
にはこのオプションはありませんが、それを使用することは理にかなっています。 Parse
のソースを見ると、JsonReader
をインスタンス化してLoad
に渡すだけであることがわかります。 JsonReader
には解析オプションがあります。
次のようにして、希望する結果を得ることができます。
JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()));
reader.DateParseHandling = DateParseHandling.None;
JObject o = JObject.Load(reader);
JsonSerializerSettings
を使用することにより、JsonConvert.DeserializeObject
を使用してこれを実行することもできます。
string s = "2012-08-08T01:54:45.3042880+00:00";
string jsonStr = $@"{{""time"":""{s}""}}";
JObject j1 = JsonConvert.DeserializeObject<JObject>(jsonStr, new JsonSerializerSettings {DateParseHandling = DateParseHandling.None});