2

我已经实现了这样的 WCF 数据服务服务:

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class SampleService : DataService<SampleDatabase>
{
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService(DataServiceConfiguration config)
    {

        // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
        // Examples:
        config.SetEntitySetAccessRule("SampleData", EntitySetRights.All);
        // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
        config.UseVerboseErrors = true;
    }
}

但是,正如其他地方所记录的那样,框架 JSON 序列化代码没有正确格式化日期。日期未以有效的 ISO 格式输出。更令人惊讶的是,WCF 不会往返输出日期。所以它输出一个看起来像这样的日期:“/Date(1325376000000)/”,但不接受相同的值作为有效日期作为回报。

Hanselman 有如何为 WebAPI 修复它: http ://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx

我发现了 MVC 序列化的类似修复: http ://www.dalsoft.co.uk/blog/index.php/2012/01/10/asp-net-mvc-3-improved-jsonvalueproviderfactory-using-json -网/

我们的客户指定了 MVC3 和 .NET 4,所以我认为 WebAPI 已经过时了,所以我想为 .NET 4 中的 MVC3 + WCF 数据服务解决这个问题。我从上述修复中的理解是,最好的修复是使用 JSON.NET 将序列化/反序列化覆盖为 .NET 和 Javascript 都可以理解的 ISO 格式。但是我找不到任何关于为此覆盖 JSON 序列化的指导。

如何专门针对 .NET 4 中的 WCF 数据服务解决此问题?

4

1 回答 1

2

在 OData V3 中,详细 JSON 中的日期时间也是使用 ISO 格式编写的。为此,您必须安装 WCF Data Services 5.0(实现 OData V3),在服务器上允许 V3 并修改客户端以请求 V3(因为 V2 有效负载将具有旧格式以实现向后兼容性)。要强制使用 V3 有效载荷格式,客户端可以发送 MinDataServiceVersion: 3.0; 标题。

注意:旧格式实际上是往返的,但它使用了棘手的 JSON 转义。实际格式是\/Date(12345678)\/(这在语义上是相同的/Date(12345678)/,但在线路上看起来不同)。不幸的是,浏览器中的 JSON 序列化代码无法生成这样的字符串。

于 2012-08-27T20:44:47.903 回答