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)/」のような日付を出力しますが、有効な日付と同じ値を返しません。

ハンゼルマンには、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と.NET4を指定しているので、WebAPIが出ていると思うので、.NET4にあるMVC3+ WCFDataServicesでこれを解決したいと思います。 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 に答える