[.Net][C#] 日付のJSONデシリアライズ
前書き
.Net Framework界隈では、Newtonsoft.Jsonがデファクトスタンダードでしょうか。
Newtonsoft.Jsonを使ってSystem.DateTime型を変換するときには、タイムゾーンの扱いに応じて4つのオプション Local Utc Unspecified RoundtripKind があります。
ドキュメントを読んでもいまいちわからなかったので実際に動かしてみました。
実験結果
デシリアライズ
2019-12-31T15:00:00.000Z という日付をデシリアライズすると、、、
| オプション | DateTimeの値 | DateTime.Kindの値 | 
|---|---|---|
| Local | 2020-01-01 00:00:00 | Local | 
| Utc | 2019-12-31 15:00:00 | Utc | 
| Unspecified | 2019-12-31 15:00:00 | Unspecified | 
| RoundtripKind | 2019-12-31 15:00:00 | Utc | 
シリアライズ
シリアライズは、ドキュメントにある通りです。まとめてみます。
| DateTime.Kindの値 | |||
|---|---|---|---|
| オプション | Unspecified | Utc | Local | 
| Local | 2013-01-21T00:00:00+09:00 | 2013-01-21T00:00:00+09:00 | 2013-01-21T00:00:00+09:00 | 
| Utc | 2013-01-21T00:00:00Z | 2013-01-21T00:00:00Z | 2013-01-20T15:00:00Z | 
| Unspecified | 2013-01-21T00:00:00 | 2013-01-21T00:00:00 | 2013-01-21T00:00:00 | 
| RoundtripKind | 2013-01-21T00:00:00 | 2013-01-21T00:00:00Z | 2013-01-21T00:00:00+09:00 |