Используя 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 возвращает ноль
Почему?
Есть ли способ полностью игнорировать все элементы в определенном поле?