Игнорировать разбор ошибок при передаче данных 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);

реквизит для варенья, чтобы сделать его еще короче =)