代码之家  ›  专栏  ›  技术社区  ›  Skin

jtoken.parse与serializeobject中的日期处理

  •  1
  • Skin  · 技术社区  · 6 年前

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

    我有一个特定的日期格式(microsoftdateformat),在与日期时间字段的SAP网关服务交谈时需要使用该格式。

    此代码:

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

    将日期时间字段序列化为所需格式,例如:

    "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服务器端执行转换。我不想在等式的web端增加太多的复杂性,所以如果我可以在应用端做,它会更受欢迎。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Skin    6 年前

    我通过一个更圆滑的方法得到了答案,可能是正确的,我不确定。归根结底,这是可行的。

    像这样的…

    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);
    }