18

全て、

ペイロードに JSON を使用した REST ベースのサービスがある ASP.NET Web API を使用しています。次の日付を文字列として渡すと、たとえば

sampleObj: {
...
myDate: "31/12/2011 00:00:00",
...
}

JSON ペイロードの属性値として、日付属性は DateTime.MinValue に逆シリアル化されます。文字列形式は有効ですか?

「2012-10-17 07:45:00」という形式が正常にシリアル化されることはわかっていますが、受信したすべての日付がこの形式になることは保証できません。有効なオプションは何ですか?

4

2 に答える 2

48

ASP.NET Web APIでは、JsonFormatterのSerializerSettingsを介してさまざまなJson.NET DateTimeConvertersを追加し、サービスにさまざまなDateTime形式を認識させることができます。

ただし、この形式「31/12/201100:00:00」をとるJson.NETのデフォルトのDateTimeConverterはないと思います。この場合、カスタムDateTimeConverterを実装します。

WebApiConfig.cs:

        config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
             new IsoDateTimeConverter());
        config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
             new MyDateTimeConverter());

カスタムDateTimeConverter:

public class MyDateTimeConverter : DateTimeConverterBase
{
    //...
}  

カスタムDateTimeConverterを作成する方法の詳細については、stackoverflowで、役立つと思われるものを見つけまし た。json.netDatetoStringカスタムコンバーターを作成する方法。

于 2012-10-17T20:49:14.893 に答える
4

web.config でグローバリゼーションを設定するだけです。

<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/>

次に、Global.asax.cs > Application_Start で、現在のカルチャを使用するように JsonFormatter を設定します。

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture;
于 2016-01-20T16:34:33.973 に答える