joe*_*yth 6 c# datetime json.net
我收到一个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" });
Run Code Online (Sandbox Code Playgroud)
这不会反转任何日期.我已经尝试使用-Z和hh:mm时区数据,但我似乎无法反序列化任何日期.
Mat*_*int 10
这是带有偏移的标准ISO 8601扩展格式时间戳,也包含在RFC 3339中.没什么特别的.
DateTimeOffset.Parse("2015-07-09T08:38:49-07:00")
Run Code Online (Sandbox Code Playgroud)
要么
DateTimeOffset.ParseExact("2015-07-09T08:38:49-07:00", "yyyy-MM-dd'T'HH:mm:sszzz",
CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
使用JSON.Net,默认值应该可以正常工作.无需指定任何特殊内容.
JsonConvert.DeserializeObject<DateTimeOffset>("\"2015-07-09T08:38:49-07:00\"")
Run Code Online (Sandbox Code Playgroud)
在问题评论中发布的小提琴布莱恩表示,它可以在反序列化更大的对象时起作用.如果您还没有使用它,也许您可以编辑您的问题以显示您尝试反序列化的特定JSON以及您将其放入的对象结构.
我注意到你的代码有一件事,你展示了json的来源jToken.ToString(),所以你必须先解析一下使用的地方JObject.Parse.这样做有点奇怪,只是转换回json并反序列化.要么直接从json字符串使用JsonConvert.DeserializeObject,要么使用,jToken.ToObject<OneLoginUser>()如果你已经jToken出于某种其他原因.无需混合使用这两种API,您可能会在此过程中丢失日期/时间信息,具体取决于您的设置.