2014-03-05 16 views
1

我正在使用帶有ServiceStack.Razor呈現的單聲道自託管服務堆應用程序。在應用程序中,用戶輸入一個英國日期(dd/mm/yyyy)的表格,但是這會在HTTP POST上轉換爲美國日期(mm/dd/yyyy)。ServiceStack UK在HTTP POST上的日期綁定

在一個正常的MVC應用程序,我會做這個使用模型綁定這裏ASP.NET MVC3: Force controller to use date format dd/mm/yyyy

你如何做到這一點的ServiceStack,因爲我無法找到任何關於它所示。

+1

如果您知道它將如何交付,難道您不能在服務中將其轉換回您所需的格式嗎?此外,請檢查此https://github.com/ServiceStack/ServiceStack.Text/blob/master/tests/ServiceStack.Text.Tests/JsonTests/JsonDateTimeTests.cs – user1477388

+0

它不會工作,因爲我會得到無效的日期,當天超過12美元,因爲它認爲美國日期的月份無效。我可以使用一個字符串,但這會破壞使用綁定的要點。 – Ollie

回答

2

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