c# - HTTP POST 上的 ServiceStack UK 日期绑定(bind)

标签 c# servicestack servicestack-razor

我正在使用带有 ServiceStack.Razor 渲染的单声道自托管服务堆栈应用程序。在应用程序中,用户在表单中输入英国日期 (dd/mm/yyyy),但会在 HTTP POST 上转换为美国日期 (mm/dd/yyyy)。

在普通的 MVC 应用程序中,我将使用模型绑定(bind)来执行此操作,如下所示 ASP.NET MVC3: Force controller to use date format dd/mm/yyyy

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

最佳答案

您可以使用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
}

关于c# - HTTP POST 上的 ServiceStack UK 日期绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22200545/

相关文章:

c# - 如何判断对象是否已被垃圾收集

c# - Caliburn.micro 将参数从一个屏幕传递到另一个屏幕

servicestack - ServiceStack中是否可以完全替代Funq?

ServiceStack Render Razor 无法找到 View

Razor 的 ServiceStack InMemoryVirtualPathProvider - GetViewPage null

来自多个模块目录的 ServiceStack Razor View

c# - 在 Xamarin Forms 中绑定(bind) BackgroundColor 属性 ContentPage

c# - 我可以将数据从 SQL Server 导入 SPSS 吗?

c# - Redis ServiceStack - 轻松获取和设置一组值?

c# - ServiceStack 和 JSV : When I serialize a Dictionary<string, 对象 > 'object' 的类型在反序列化时丢失