HTTP POST上的ServiceStack UK日期绑定

时间:2014-03-05 14:27:13

标签: c# servicestack servicestack-razor

我正在使用带有ServiceStack.Razor呈现的单一自托管服务堆栈应用程序。在应用程序中,用户在表格中输入英国日期(年/月/日),但在HTTP POST上将其转换为美国日期(mm / dd / yyyy)。

在普通的MVC应用程序中,我会使用模型绑定来完成此操作,如ASP.NET MVC3: Force controller to use date format dd/mm/yyyy

所示

如何在ServiceStack中执行此操作,因为我找不到任何相关内容。

1 个答案:

答案 0 :(得分:3)

您可以使用custom serializers/deserializers全局控制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
}