Обработка ошибок «Входная строка не является допустимым числом» при десериализации json - PullRequest
1 голос
/ 03 мая 2019

Используя Newtonsoft.Json, мне нужно десериализовать json, который содержит число 2.696539702293474e308, которое является их способом выражения 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 возвращает ноль

Почему? Есть ли способ полностью игнорировать все элементы в определенном поле?

...