2

问题

当我将 jSon 数据发布到 webapi 时,使用 pt-br 格式(日期为 dd/mm/yyyy,浮点数为逗号小数分隔符),这些值被反序列化为 en-us 格式,从而导致错误。

IE

» 日期:发布 23/01/2013 变为 01/01/0001

» 浮动:发布 1,4 变为 0.0

帮助请求

任何人都可以帮我定义“终极”解决方案,以使用除美国以外的其他文化将数据发布到 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"/>
4

2 回答 2

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

于 2013-01-25T20:15:36.923 回答
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 中使用输入 type=date。

此外,您需要将 moment.js 库包含到您的项目中。

于 2014-11-12T12:32:38.333 回答