问题
当我将jSon数据发布到webapi时,使用pt-br格式(日期为dd / mm / yyyy,浮点数为逗号小数点分隔符),将值反序列化为en-us格式,从而导致错误。
即
»日期:发布23/01/2013 becames 01/01/0001
»float:发布1,4 becames 0.0
帮助申请
任何人都可以帮助我定义使用除en-US之外的其他文化将数据发布到web api的“终极”解决方案。 我已经阅读了一些讨论,但没有一个提出完整的解决方案,甚至是一个有效的解决方案。
考虑以下
型号:
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"/>
答案 0 :(得分:0)
您可以尝试将其发布为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
答案 1 :(得分:0)
要解决此问题,我为日期创建了自定义绑定。
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库包含在您的项目中。