处理JSON反序列化中的“输入字符串不是有效数字”错误

时间:2019-05-03 13:23:28

标签: c# json error-handling deserialization custom-error-handling

使用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返回一个MyClass,其中填充了“ VectorOfDoubles”。实际上,我什至都不在乎“ 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

为什么? 有没有办法完全忽略某个字段上的所有项目?

0 个答案:

没有答案