2

問題

pt-br形式(日付の場合はdd / mm / yyyy、floatの場合はコンマ小数点記号)を使用してjSonデータをwebapiに投稿すると、値がen-us形式として逆シリアル化され、エラーが発生します。

すなわち

»日付:投稿23/01/2013は01/01/0001になりました

»float:投稿1,4は0.0になりました

ヘルプリクエスト

en-US以外のカルチャを使用してデータをWebAPIに投稿するための「究極の」ソリューションを定義するのを誰かが助けてくれますか。私はいくつかの議論を読みましたが、それらのどれも完全な解決策、あるいは実用的な解決策を提示していません。

次のことを考慮して

モデル:

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:00htmlでinputtype=dateを使用することをお勧めします。

また、moment.jsライブラリをプロジェクトに含める必要があります。

于 2014-11-12T12:32:38.333 に答える