.NET number values such as positive and negative infinity cannot be written as valid JSON. To make it work when using 'JsonSerializer'
8/23/2024 11

在生产环境中我得到下面一个错误:
.NET number values such as positive and negative infinity cannot be written as valid JSON. To make it work when using 'JsonSerializer', consider specifying 'JsonNumberHandling.AllowNamedFloatingPointLiterals'

错误翻译:
.NET数值(如正无穷大和负无穷大)不能写成有效的JSON。要使其在使用“JsonSerializer”时工作,请考虑指定“JsonNumberHandling”。允许的命名浮点文字

让我们来复现这个错误,首先看下面这段代码,显然,它会出现第4行异常,因为0做除数了,这大家都知道

csharp 复制代码
app.MapGet("/zero", () =>
{
    double a = 0;
    var b = Math.Round(10 / a, MidpointRounding.AwayFromZero);
    return Results.Ok(b);
});

实际上,第4行执行通过了,没报错,而是在Api默认JsonSerializer库序列化时报错了;这是为什么呢?
调试发现变量b得到的值是NaN;这很疑惑,查阅文档后发现double类型支持Double.NaN,这是可以存在的值,数值无法解析(例如0做除数后的结果)。
JsonSerializer库不支持序列化值Double.NaN,所以报错;问题解决,不禁感叹,又学到了!


Comments