当字符串包含空值时,JsonConvert.DeserializeObject失败(" NaN")

时间:2018-05-16 15:54:25

标签: c# asp.net-mvc knockout.js json.net

我将数据发布到由knockout字符串化的控制器:

var data = ko.toJSON(viewModel);

$.ajax({
    type: 'POST',
    url: '@Url.Action("Action")',
    data: { data: data },
    dataType: 'json'
    ....
})

然后在服务器端,我尝试用JsonConvert反序列化数据。

var viewModel = JsonConvert.DeserializeObject<ViewModel>(data,
        new JsonSerializerSettings
        {
            DateTimeZoneHandling = DateTimeZoneHandling.Local,
            DateFormatHandling = DateFormatHandling.IsoDateFormat
        });

如果数据包含空值(序列化为&#34; NaN&#34;),则会失败,如下所示:

"MyField":"NaN"

没有空值,它可以正常工作。

我尝试将 NullValueHandling = NullValueHandling.Include / Ignore 添加到序列化程序设置中,但均未成功。

1 个答案:

答案 0 :(得分:1)

我通过在敲除字符串中添加一个小replacer function来解决这个问题(正如DavidG所建议的那样 - 谢谢你,我应该从头开始做这项工作)。

var data = ko.toJSON(viewModel, function (key, value) { 
    if (value == "NaN") {
        return;
    }
    else {
        return value;
    }
});