2

ServiceStack.Razor レンダリングを使用して、単一の自己ホスト型サービススタック アプリケーションを使用しています。アプリケーションで、ユーザーは英国の日付 (dd/mm/yyyy) をフォームに入力しますが、これは HTTP POST で米国の日付 (mm/dd/yyyy) に変換されます。

通常の MVC アプリケーションでは、ASP.NET MVC3: Force controller to use date format dd/mm/yyyyに示すように、モデル バインディングを使用してこれを行います。

何も見つからなかったので、ServiceStack でこれを行うにはどうすればよいですか。

4

1 に答える 1

3

カスタム シリアライザー/デシリアライザーを使用して、DateTime 値のシリアライズとデシリアライズをグローバルに制御できます。

AppHost で:

using ServiceStack.Text;

JsConfig<DateTime>.SerializeFn = SerializeAsUKDate;
// Also, if you need to support nullable DateTimes:
JsConfig<DateTime?>.SerializeFn = SerializeAsNullableUKDate;

public static string SerializeAsUKDate(DateTime value)
{
    // or whatever you prefer to specify the format/culture
    return value.ToString("dd/MM/yyyy");
}

public static string SerializeAsNullableUKDate(DateTime? value)
{
    return value.HasValue ? SerializeAsUKDate(value.Value) : null;
}

DeSerializeFn日付が正しく解析されるように指定する必要がある場合とない場合があります。ServiceStack.Text の日付デシリアライザーはかなり堅牢です。

JsConfig<DateTime>.DeSerializeFn = DeSerializeAsUKDate;

public static DateTime DeSerializeAsUKDate(string value)
{
    // date parsing logic here
    // ServiceStack.Text.Common.DateTimeSerializer has some helper methods you may want to leverage
}
于 2014-03-07T15:11:43.250 に答える