Newtonsoft. Json пропустить недействительные объекты, продолжить десериализацию - PullRequest
0 голосов
/ 28 февраля 2020

Как пропустить / игнорировать / обработать недопустимые json объекты в Newtonsoft JSON?

Допустим, у нас есть строка типа:

[{
    "$id": "xc1",
    "sdfdsgds0sdfsadgdxc,sfgsagdfgdsfdm",
    "gxcgdfs"
}, {
    "$id": "2",
    "Property1": "Value",
    "Property2": "Value2"
}]

При выполнении

JsonConvert.DeserializeObject<T>(jsonString);

Итак, первый объект недействителен, но я хотел бы прочитать второй действительный, но у меня есть JsonReaderException, есть ли способ добиться игнорирования / пропуска недопустимых объектов в массиве и go далее с десериализацией?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Я нашел частично удовлетворительное решение здесь, но оно все еще не работает точно так, как я хотел бы. Десериализация только допустимых объектов, игнорируя ошибки

0 голосов
/ 28 февраля 2020

Я использую класс JsonSerializerSettings для определения ошибок при получении сериализации JSON строки.

var settings = new JsonSerializerSettings
{
    Error = (obj, args) =>
    {
        var contextErrors = args.ErrorContext;
        contextErrors.Handled = true;
    }
};
var result = streamReader.ReadToEnd();
List<ViewModel> viewModel = JsonConvert.DeserializeObject<List<viewModel>>(result, settings);
...