簡體   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