首页 > 解决方案 > 处理 json 反序列化中的“输入字符串不是有效数字”错误

问题描述

使用 Newtonsoft.Json,我需要反序列化一个包含数字“2.696539702293474e308”的 json,这是他们表达 NaN 的方式

以下代码几乎可以工作


public class MyClass
{
    public double[] VectorOfDoubles;
}

private static void Do()
{
    var errors = new List<string>();

    var content = "{ " +
        "\"VectorOfDoubles\" : [0.2, 0.3] " +
        ", \"WithNans\" : [0.4, 2.696539702293474e308] " +
        "}";

    var output = JsonConvert.DeserializeObject<MyClass>(content, new JsonSerializerSettings
    {
        Error = (currentObject, errorArgs) =>
        {
            errors.Add(errorArgs.ErrorContext.Error.Message);
            errorArgs.ErrorContext.Handled = true;
        },
    });
}

通过上面的示例,我得到了我需要的东西:.DeserializeObject 返回一个填充了“VectorOfDoubles”的 MyClass。实际上,我什至不关心“WithNans”向量。“错误”中有正确的一项:

"Input string '2.696539702293474e308' is not a valid number. Path 'WithNans[1]', line 1, position 75."

如果 WithNans 包含一个以上的违规项目,则会出现问题,例如

"WithNans" [0.4, 2.696539702293474e308, 2.696539702293474e308]

在这种情况下,错误包含两个项目,但 .DeserializeObject 返回 null

为什么?有没有办法完全忽略某个领域的所有项目?

标签: c#jsonerror-handlingdeserializationcustom-error-handling

解决方案


推荐阅读