[C#] JObject 会将 json 中含有时区的讯息遗失?

原文:[C#] JObject 会将 json 中含有时区的讯息遗失?

.NET 环境操作 json 时一般都是使用 JSON.NET,效能不错又有许多方便的物件可以使用,之前黑大就有分享一篇 使用dynamic简化Json.NET JObject操作,不过最近在使用 JObject 时有踩到一个雷与大家分享。

JObject 预设会对它认为是时间的字串进行转换,但若我们使用 String 的方式输出则会遗失时区的资讯,範例如下:

string json = "{\"DateTime\":\"2012-12-21T08:00:00+0800\"}";                        var jObj = JObject.Parse(json);Console.WriteLine(jObj.Value<string>("DateTime"));

若改用 DateTime 输出则可以正常印出时区的资讯,範例如下:

string json = "{\"DateTime\":\"2012-12-21T08:00:00+0800\"}";var jObj = JObject.Parse(json);            Console.WriteLine(jObj.Value<DateTime>("DateTime").ToString("yyyy-MM-dd HH:mm:ss \"GMT\"zzz"));

但若想要输出 String 又想要保留原始 json 中的完整 ISO8601 内容怎么办?
没问题,JSON.NET 都帮我们预留方法了,可以使用 JObject.Load() 并改变 JsonTextReader.DateParseHandling 即可,範例如下:

string json = "{\"DateTime\":\"2012-12-21T08:00:00+0800\"}";JObject jObj = null;using (var sr = new StringReader(json))using (var jtr = new JsonTextReader(sr)){    jtr.DateParseHandling = DateParseHandling.None;    jObj = JObject.Load(jtr);}Console.WriteLine(jObj.Value<string>("DateTime"));

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章