c# - 有没有办法在这个 JSONPath 查询的结果中保留时区信息?
问题描述
我正在使用 JSONPath 查询(和 NewtonSoft.Json.Linq)从用户提供的 JSON 中提取属性,但我遇到了 JSON“日期”类型的问题。
示例代码(可以在https://dotnetfiddle.net/SqslzX中修改):
string json = "{ \"MyTime\":\"2014-04-20T18:15:11-0700\" }";
var sourceToken = JToken.Parse(json);
var myTimeToken = sourceToken.SelectToken("MyTime");
var myTimeOffset = myTimeToken.ToObject<DateTimeOffset>();
Console.WriteLine(myTimeToken.ToString());
Console.WriteLine(myTimeOffset.ToString());
输出(在 .net Fiddle 中运行)如下所示:
4/21/2014 1:15:11 AM
4/21/2014 1:15:11 AM +00:00
我知道这些时间对于当地时区是正确的。但如果可能的话,我想找到一种方法来保留原始时间和偏移值。
解决方案
问题是默认情况下,序列化程序设置DateParseHandling
为DateParseHandling.DateTime
. 我们需要使用一种允许自定义序列化程序设置的方法,所以Parse
不会削减它。您可以使用DeserializeObject
.NET 类型,但我猜您没有强类型。这有效,并且仍然允许您使用 LINQ 方法:
string json = "{ \"MyTime\":\"2014-04-20T18:15:11-0700\" }";
JsonReader reader = new JsonTextReader(new StringReader(json));
reader.DateParseHandling = DateParseHandling.DateTimeOffset; // this is what we need to change
var sourceObject = JObject.Load(reader);
var myTimeToken = sourceObject.SelectToken("MyTime");
var myTimeOffset = myTimeToken.ToObject<DateTimeOffset>();
Console.WriteLine(myTimeOffset.ToString());
//prints: 4/20/2014 6:15:11 PM -07:00
推荐阅读
- ios - Swift Firebase Get childByAutoId Key When Setting
- ajax - 如何从ajax post获取jsp文件中的参数
- java - Try and Catch loops
- python - import skimage not a Valid Win32 application python3
- javascript - Python:如何更改网站页面的 URL?
- colors - Netlogo:如何只在有乌龟的时候给补丁上色?
- javascript - React context consumer how to access ref on to the consuming component
- go - What's the best way to get notified when kubernetes Deployments change using the k8s.io/client-go library?
- powershell - PowerShell question with sorting and piping
- react-native - How to add a UPI payment option to react native app