繁体   English   中英

JToken.Parse与SerializeObject中的日期处理

[英]Date handling in JToken.Parse vs SerializeObject

我想知道是否有人曾经看过这个“问题”以及如何纠正它的潜在解决方案?

与DateTime字段的SAP Gateway服务进行对话时,需要使用一种特定的日期格式(MicrosoftDateFormat)。

这段代码:

string payload = JsonConvert.SerializeObject(myObject, new JsonSerializerSettings()
{
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
});

将DateTime字段序列化为所需的格式,例如:

"DocumentModifiedDate": "/Date(1533686400000)/"

但是我随后需要将JSON转换为JToken对象,以将其通过框架传递给我的Web服务。 当我转换为JToken时,日期被格式化为ATOM样式方法:

var jot = Newtonsoft.Json.Linq.JToken.Parse(payload); 

结果是:

"DocumentModifiedDate": "2018-08-08T00:00:00Z"

我尝试使用JToken.FromObject方法:

var jot = Newtonsoft.Json.Linq.JToken.FromObject(myObject, new JsonSerializer()
{
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
});

但这似乎并未利用序列化程序设置。

希望有人曾经遇到过这种情况,可以为您提供帮助。

如果您在这里不能提供帮助,那么有一种简便的方法可以在node.js中执行该转换,因为在实际将其发送给SAP之前,有机会在Web服务器端进行转换。 我不想在方程式的网络端增加太多复杂性,因此,如果我可以在应用程序端做到这一点,那就更可取了。

我通过更round回的方法得到了答案,这可能是正确的,我不确定。 最重要的是,它有效。

像这样的东西...

var payload = JsonConvert.SerializeObject(myObject, new JsonSerializerSettings()
{
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
});

using (var sr = new StringReader(payload))
using (var jr = new JsonTextReader(sr) { DateParseHandling = DateParseHandling.None })
{
    var jot = JToken.ReadFrom(jr);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM