【问题标题】:HTTP WCF Service, JSON date formatting issue returning IEnumerable<class>HTTP WCF 服务,返回 IEnumerable<class> 的 JSON 日期格式问题
【发布时间】:2016-11-29 07:39:04
【问题描述】:

我有一个 Restful WCF Http 服务,它返回 JSON 并且运行良好,除了 DateTime 格式不正确:

例如"AdjudDate": "/Date(1349409600000-0400)/"

环顾四周后,我在这里找到了一篇旧帖子,但我无法让该代码正常工作。它最后一次更新是在 2011 年。是否有更新的版本或实现? JSON.NET Serializer for WCF REST Services

这是我返回 IEnumerable 的代码。

//除了日期之外,所有的 JSON 值都是好的:

private IEnumerable<Customer> ProcessWcfPost(Customer searchmodel)
{
    return _repository.GetCustomers(searchModel);
}

编辑 我当然也尝试过将返回类型更改为字符串而不是 IEnumerable 为:

private string ProcessWcfPost(Customer searchmodel)
    {
        var result = _repository.GetCustomers(searchModel);
        return Newtonsoft.Json.JsonConvert.SerializeObject(result);
    }

但我的 JSON 不太正确: [{\"ClaimProcessId\":1599986,\"ClmHdrId\":1011,\"ClmLineId\":1011,\"ClmAdjId\":1011,\"ReceivedDtSur\":\"2012-12-05T00:00: 00\",\"AdjudicationDtSur\":\"2011-10-05T00:00:00\"(on and on)...

【问题讨论】:

  • 您考虑过使用 ASP.NET Web API 吗?它使 REST 服务的编写非常简单,并且使用 Json() 函数内置了 JSON 序列化。
  • 是的,先生,我最初是作为一个 ASP.NET Web API 编写的,但我被命令将它变成一个 HTTP WCF 服务。这就是商业世界:)
  • 所以使用 JsonConvert.SerializeObject() 你仍然得到错误的日期格式?您可以在 DateTime 属性上指定和属性以强制 Json.Net 如何对其进行格式化。这是 Json.Net 日期格式的指南,您可以在其中看到如何将其更改为您想要的格式:newtonsoft.com/json/help/html/datesinjson.htm
  • 谢谢。使用 JsonConvert.SerializeObject() 日期是正确的,但所有 JSON 都加载了额外的反斜杠和引号。我错过了格式化选项吗?我正在使用 PostMan 调用我的 HTTP WCF 服务来呈现我的 JSON,也许这就是问题所在?
  • 斜线只是 C# 中 " 的转义字符。如果您在 C# 调试器中查看字符串,它将具有这些斜线。WCF 服务返回的实际字符串应该是干净的 JSON。你能在此处发布 PostMan 的完整 HTTP 响应?

标签: c# json rest wcf http


【解决方案1】:

您可以尝试使用 IsoDateTimeConverter

IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();
timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
string strJSON = JsonConvert.SerializeObject(jsonObject, Newtonsoft.Json.Formatting.Indented, timeConverter);

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我可以找到一个可能对任何人都有帮助的解决方案。 此解决方案基于DateTimeKind.Utc,它将返回不带 -0400 的日期,例如:

    Public Function test() As Date
    
    Dim DateFormatted As New DateTime(2017, 07, 04, 8, 18, 42, DateTimeKind.Utc)
    return DateFormatted 
    
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多