Дата публикации (дд / мм / гггг) и значения с плавающей запятой (запятая) в aspnet WebApi
Эта проблема
Когда я публикую данные jSon в webapi, используя форматы pt-br (дд / мм / гггг для даты и десятичный разделитель запятой для числа с плавающей запятой), значения десериализуются в формате en-us, что приводит к ошибке.
т.е.
"Дата: публикация 23.01.2013 стала 01.010001
"Плавать: размещение 1,4 стал 0,0
Запрос на помощь
Может ли кто-нибудь помочь мне определить "окончательное" решение для публикации данных в веб-API, используя другие культуры, кроме en-US. Я прочитал несколько обсуждений, но ни одно из них не представляет полного решения или даже рабочего решения.
Учитывая следующее
Модель:
public class Person
{
public Datetime BirthDate { get; set; }
public double Weight { get; set; }
}
Метод ApiController
public HttpResponseMessage Create(Person person)
{
// ...
}
AjaxCall
$.ajax({
type: 'POST',
url: sl.baseUri + "/create",
data: "Weight=87%2C7&BirthDate=17%2F07%2F1981",
success: null,
dataType: "json",
})
** Я уже добавил следующие параметры глобализации в web.config
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="pt-BR" uiCulture="pt-BR"/>
2 ответа
Чтобы решить эту проблему, я создал пользовательскую привязку для дат.
ko.bindingHandlers.date = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
ko.utils.registerEventHandler(element, 'change', function () {
var value = valueAccessor();
if (element.value !== null && element.value !== undefined && element.value.length > 0) {
value(element.value);
}
else {
value('');
}
});
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var value = valueAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
var output = '';
if (valueUnwrapped !== null && valueUnwrapped !== undefined && valueUnwrapped.length > 0) {
output = moment(valueUnwrapped).format('YYYY-MM-DD');
}
if ($(element).is('input') === true) {
$(element).val(output);
} else {
$(element).text(output);
}
}
};
Эта привязка сохраняет дату в следующем формате: 2014-11-05T00:00:00-02:00 Рекомендуется использовать тип ввода = дата в html.
Кроме того, вам нужно включить библиотеку moment.js в ваш проект.
Вы можете попробовать опубликовать его как объект JSON, а не просто строку:
{"BirthDate": "17/07/1981", "Weight": "87,7"}
Однако вам нужно будет сообщить Json.Net, какой формат даты ожидать: http://james.newtonking.com/archive/2009/02/20/good-date-times-with-json-net.aspx