Есть ли встроенный способ (или трюк) для анализа только допустимых объектов и игнорирования недействительных единиц?
Недубликат
Вопрос Игнорирование неверного поля при десериализации json в Json.Net не отвечает на мой вопрос, поскольку речь идет о настраиваемом сериализаторе для очень специфического поля даты и временитип.Я ищу универсальное решение, работающее для любой собственности и любого объекта.
Другими словами, если что-то недопустимо, просто проигнорируйте это и продолжите к следующей записи.Что касается json, файл правильный, но в некоторых местах содержимое может не соответствовать ожидаемым типам.Это может быть что угодно.
Справочная информация: файл содержит массив из множества рабочих процессов , и одна поврежденная запись не должна нарушать всю конфигурацию и фактически отключатьих все.
Вот пример, демонстрирующий, что я имею в виду.Допустим, у меня есть массив User
с, но одна запись вместо использования string
для Name
использует массив (это может быть любая комбинация недопустимых значений, например, объект, где ожидается массив.
Я бы хотел десериализовать этот массив и игнорировать записи, которые нельзя десериализовать. Это означает, что ожидаемый результат должен быть двух пользователей, John & Tom .
Я пытался использовать обработчик Error
, но он не работает таким образом. Он не позволяет мне пропустить ошибки.
void Main()
{
var json = @"
[
{
'Name': 'John',
},
{
'Name': [ 'John' ]
},
{
'Name': 'Tom',
},
]
";
var users = JsonConvert.DeserializeObject<IEnumerable<User>>(json, new JsonSerializerSettings
{
Error = (sender, e) =>
{
e.Dump();
e.ErrorContext.Handled = true;
e.CurrentObject.Dump();
}
}).Dump();
}
class User
{
public string Name { get; set; }
}