首页 > 解决方案 > 当字符串包含空值(“NaN”)时,JsonConvert.DeserializeObject 失败

问题描述

我将数据发布到通过淘汰赛字符串化的控制器:

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
        });

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

"MyField":"NaN"

没有空值,它工作正常。

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

标签: c#asp.net-mvcknockout.jsjson.net

解决方案


我通过向淘汰赛字符串化器添加一个小的替换函数来解决这个问题(正如 DavidG 所建议的那样——谢谢,我应该从一开始就完成这项工作)。

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

推荐阅读