ServiceStack UK привязка даты по HTTP POST

Я использую моно самодостаточное приложение servicestack с рендерингом ServiceStack.Razor. В приложении пользователь вводит в форму дату в Великобритании (дд / мм / гггг), но она преобразуется в дату в США (мм / дд / гггг) по HTTP POST.

В обычном приложении MVC я бы сделал это, используя привязку модели, как показано здесь ASP.NET MVC3: заставить контроллер использовать формат даты дд / мм / гггг

Как ты это делаешь в ServiceStack, так как я не смог ничего найти по этому поводу.

1 ответ

Решение

Вы можете использовать пользовательские сериализаторы / десериализаторы для глобального управления сериализацией и десериализацией значений 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
}
Другие вопросы по тегам