Игнорировать разбор ошибок при передаче данных Json.NET парсинг
у меня есть объект с заданными структурой данных:
public class A
{
public string Id {get;set;}
public bool? Enabled {get;set;}
public int? Age {get;set;}
}
и JSON должен быть
{ "Id": "123", "Enabled": true, "Age": 23 }
Я хочу обрабатывать ошибку JSON положительным образом, и всякий раз, когда сервер возвращает неожиданные значения для определенных типов данных, я хочу, чтобы он игнорировал, а значение по умолчанию установлено (null).
прямо сейчас, когда JSON частично недействителен, я получаю исключение JSON reader:
{ "Id": "123", "Enabled": "NotABoolValue", "Age": 23 }
и я не получаю никакого объекта вообще. Что я хочу получить объект:
new A() { Id = "123", Enabled = null, Age = 23 }
и разбор предупреждение, если это возможно. Возможно ли это сделать с помощью JSON.NET?
2 ответов
чтобы иметь возможность обрабатывать ошибки десериализации, используйте следующий код:
var a = JsonConvert.DeserializeObject<A>("-- JSON STRING --", new JsonSerializerSettings
{
Error = HandleDeserializationError
});
здесь HandleDeserializationError
следующий способ:
public void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
{
var currentError = errorArgs.ErrorContext.Error.Message;
errorArgs.ErrorContext.Handled = true;
}
на HandleDeserializationError
будет вызываться столько раз, сколько ошибок в строке json. Свойства, вызывающие ошибку, инициализироваться не будут.
то же самое, что и решение Ильи, но онелинер для ленивых/на спешке (кредит идет ему)
var settings = new JsonSerializerSettings { Error = (se, ev) => { ev.ErrorContext.Handled = true; } };
JsonConvert.DeserializeObject<YourType>(yourJsonStringVariable, settings);
реквизит для варенья, чтобы сделать его еще короче =)