Служебная заявка на запрос даты и времени десериализации - как заставить ее игнорировать текущую культуру?

1

Служебная программа datetime deserialization отлично работает на моей локальной машине с датским языком/регионом, но на сервере производства она не работает, потому что она имеет английскую культуру.

Как заставить его игнорировать текущую культуру?

Это работает локально: ourdomain.dk/api/json/reply/LoadGuardBookView?date=24/07/2014

Это работает на производстве: ourdomain.dk/api/json/reply/LoadGuardBookView?date=07/24/2014

Различные цветовые форматы. Как заставить его работать как с тем же кодом?
Вызов из javascript, поэтому у меня нет культуры под рукой.

Изменить 1:

var date = $.datepicker.formatDate("d/m/yy", $("#calendar").datepicker("getDate"));
$.get("/api/json/reply/LoadGuardBookView", {
    Date: date
}, function (data) {
    ...
}).fail(function (e) {
   ...
    console.log("Error reloading GuardBook");
});

Сервер:

public class GuardBookService : Service, IGet<LoadGuardBookView>
{
    public object Get(LoadGuardBookView request)
    {
        ...
    }

    public class LoadGuardBookView
    {
        public DateTime Date { get; set; } 
    }
}

Исключение:

{"ResponseStatus": {"ErrorCode": "SerializationException", "Сообщение": "Не удалось выполнить десериализацию" *.LoadGuardBookView 'с использованием KeyValueDataContractDeserializer:' date = 24-07-2014 '.\NError:' System.Runtime.Serialization.SerializationException: KeyValueDataContractDeserializer: преобразование ошибки в тип: String не была признана допустимым DateTime. ---> System.FormatException: String не была признана допустимым DateTime.\R\n в System.DateTime.Parse(String s, Поставщик IFormatProvider, стили DateTimeStyles)\r\n в ServiceStack.Text.Common.DateTimeSerializer.ParseShortestXsdDateTime(String dateTimeStr)\r\n в ServiceStack.Text.Common.DeserializeBuiltin 1.<GetParseFn>b__b(String value)\r\n at ServiceStack.ServiceModel.Serialization.StringMapTypeDeserializer.PopulateFromMap(Object instance, IDictionary 2 keyValuePairs, List 1 ignoredWarningsOnPropertyNames)\r\n --- End of inner exception stack trace ---\r\n at ServiceStack.ServiceModel.Serialization.StringMapTypeDeserializer.PopulateFromMap(Object instance, IDictionary 1 ignoredWarningsOnPropertyNames)\r\n --- End of inner exception stack trace ---\r\n at ServiceStack.ServiceModel.Serialization.StringMapTypeDeserializer.PopulateFromMap(Object instance, IDictionary 2 keyValuePairs, List 1 ignoredWarningsOnPropertyNames)\r\n at ServiceStack.ServiceModel.Serialization.KeyValueDataContractDeserializer.Parse(IDictionary 2 keyValuePairs, Type returnType)\r\n в ServiceStack.WebHost.Endpoints.Support.EndpointHandlerBase.DeserializeHttpRequest (Тип operationType, IHttpRequest httpReq, String contentType) '"}}

  • 1
    Покажите нам свой код.
  • 0
    Было бы полезно, если бы мы могли видеть ваш код.
Показать ещё 4 комментария
Теги:
deserialization
datetime
servicestack

1 ответ

0
Лучший ответ

Я нашел обходное решение, которое работает как на местном, так и на производстве:

ourdomain.dk/api/json/reply/LoadGuardBookView?date=2014-07-24

Изменение: как говорится в комментариях - это способ сделать это. (ГГГГ-ММ-ДД)

  • 0
    Это идеальное решение: xkcd.com/1179
  • 0
    @mythz правильно. Можно также использовать стандарт ISO «YYYY-MM-DD». Что-нибудь еще, и вы просите изжога.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню