Jtoken 包含 DateTime tostring 意外行为

Jtoken containing DateTime tostring unexpected behaviour

我有这个json:

{
  "sku": "articlenumber",
  "lastModified": "2022-05-06T10:07:23.934Z",
  "quantity": 20
}

我必须发送“lastModified”的准确值。因为我不必对这个值做任何操作,所以我决定将它存储在一个字符串中。问题是将 JToken 转换为字符串给我一个完全不同的格式:

string foo = (string)json["lastModified"]
/// 05/06/2022 10:07:23

如何从 json 中获取实际收到的原始字符串?

我已经尝试过的: 将数据解析为日期时间对象并使用自定义设置进行序列化

JsonSerializerSettings settings = new JsonSerializerSettings
{  
    DateFormatString = "yyyy-MM-dd'T'HH:mm:ss.fffZ",
    DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
};

这给了我一个格式正确的字符串,但将毫秒归零。

/// "2022-05-06T10:07:23.000Z"
var json = "{\"sku\": \"articlenumber\",\"lastModified\": \"2022-05-06T10:07:23.934Z\", \"quantity\": 20}";
var settings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None };
var data = JsonConvert.DeserializeObject<JObject>(json, settings);
var result = data.Value<string>("lastModified");
  • 这里的技巧是 DateParseHandling.None
  • 奇怪的部分是使用 DeserializeObject 得到 JObject

如果您愿意,也可以使用 data["lastModified"].Value<string>()