Как пропустить элемент в JsonArray, если синтаксический анализ этого элемента не удался?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как пропустить элемент в JsonArray, если синтаксический анализ этого элемента не удался?

Сообщение Anonymous »

Ниже приведен код по умолчанию для анализа JsonArray, который работает совершенно нормально, если в строке Json нет ошибок или опечаток:

Код: Выделить всё

public class Person
{
public int Id { get; set; }
public required string Name { get; set; }
}
Код программы:

Код: Выделить всё

var jsonString = @"
[
{ ""Id"": 1, ""Name"": ""name1"" },
{ ""Id"": 2, ""Name"": ""name2"" },
{ ""Id"": 3, ""NameX"": ""name3"" },
{ ""Id"": 4, ""Name"": ""name4"" },
{ ""Id"": 5, ""Name"": ""name5"" }
]
";

List people = JsonSerializer.Deserialize(jsonString) ?? [];

Console.WriteLine(people.Count);
Но обратите внимание, что в jsonString, к сожалению, есть опечатка.
Конечно, это приводит к ошибке во время выполнения. Можно обернуть Deserialize в try-catch, но тогда в моем массиве People будет 0 человек.
Это это, конечно, упрощение ситуации, которая у меня есть, в моем случае я получаю json из внешнего источника. (Предположим, в этом примере невозможно пропустить обязательный атрибут для строки Name)
Как я могу изменить этот код, чтобы у меня фактически был TryDeserialize ? Я хотел бы проанализировать каждый правильный объект и пропустить (и записать, если это возможно) все неправильные объекты? Чтобы в моем последнем массиве людей было 4 человека (идентификаторы 1,2,4,5)?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ment-fails
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»