我收到一个 JSON 字符串,其中包含如下所示的日期:2015-07-09T08:38:49-07:00
最后一部分是时区。有没有一种标准方法可以将其转换为DateTimeOffset
?
这是我到目前为止所拥有的:
var olu = JsonConvert.DeserializeObject<OneLoginUser>(jToken.ToString(), new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd'T'HH:mm:sszzz" });
这不会反序列化任何日期。我尝试过使用-Z
and hh:mm
对于时区数据,但我似乎无法反序列化任何日期。
作为参考,这是来自 SSO 提供商 OneLogin 的。这是一个链接 https://developers.onelogin.com/docs/user-elements到用户文档。请注意顶部有关日期的部分。
这是一个标准ISO 8601 https://en.wikipedia.org/wiki/ISO_8601带偏移量的扩展格式时间戳,也包括RFC 3339 https://www.rfc-editor.org/rfc/rfc3339。没什么特别的。
DateTimeOffset.Parse("2015-07-09T08:38:49-07:00")
Or
DateTimeOffset.ParseExact("2015-07-09T08:38:49-07:00", "yyyy-MM-dd'T'HH:mm:sszzz",
CultureInfo.InvariantCulture)
对于 JSON.Net,默认值应该可以正常工作。无需指定任何特殊内容。
JsonConvert.DeserializeObject<DateTimeOffset>("\"2015-07-09T08:38:49-07:00\"")
The 小提琴布莱恩发布 https://dotnetfiddle.net/wtTIup问题中的注释表明它在反序列化较大对象时有效。如果您仍然无法让它工作,也许您可以编辑您的问题以显示您尝试反序列化的特定 JSON 以及您将其放入的对象结构。
我注意到关于你的代码的一件事,你显示了来自的 jsonjToken.ToString()
,所以你之前必须在某个地方使用过解析JObject.Parse
。这样做有点奇怪,只是转换回 json 并反序列化。要么使用直接从 json 字符串转到实体JsonConvert.DeserializeObject
,或使用jToken.ToObject<OneLoginUser>()
如果你已经开始了jToken
由于某些其他原因。无需混合使用这两个 API,并且根据您的设置,您可能会在此过程中丢失日期/时间信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)