Ожидается, что JsonSerializer.Deserialize вызовет исключение при десериализации другого класса

В .NET Core 3.1 я использую System.Text.Json.JsonSerializer для обработки своих объектов Json. Когда я пытался написать случай ошибки, когда JsonSerializer.Deserialize<T>() получает строку Json другого типа, чем T, я не получаю никакого исключения.

Вот пример кода:

using System; using System.Text.Json; namespace JsonParsing { class Program { { try { B b = JsonSerializer.Deserialize<B>( JsonSerializer.Serialize( new A() { a = «asdf» } ) ); Console.WriteLine( $»b:{b.b}» ); } catch( JsonException ex ) { Console.WriteLine( $»Json error: {ex.Message}» ); } } } public class A { public A() {} public string a { get; set; } } public class B { public B() {} public string b { get; set; } public C c { get; set; } } public class C { public C() {} public int c { get; set; } } }

Я ожидал, что выдаст JsonException, как описано в System.Text.Json.JsonSerializerSystem_System_Deserialize_System.Text.Json.JsonSerializerSystem_System_Deserialize_System.Text.Json.JsonSerializerSystem_System_Start Документация Microsoft. Вместо этого я получаю в Console.WriteLine( $»b:{b.b}» ) объект B с каждым свойством, содержащим null.

Я что-то упускаю?

Если вы ищете эквивалент MissingMemberHandling от Newtonsoft или ItemRequired в системе . text.json, значит, его не существует.   —  person SzeliTom    schedule 15.01.2021

Из docs: Обязательные свойства … System.Text.Json не генерирует исключение, если не получено значение для одного из свойств целевого типа … Чтобы десериализация завершилась неудачно если в JSON нет свойства, реализуйте настраиваемый преобразователь.   —  person SzeliTom    schedule 15.01.2021

А также из docs MissingMemberHandling … System.Text.Json игнорирует дополнительные свойства в JSON, за исключением случаев, когда вы используете атрибут [JsonExtensionData]. Нет никакого обходного пути для функции отсутствующего участника.   —  person SzeliTom    schedule 15.01.2021

Ладно, я понял. Спасибо за помощь   —  person SzeliTom    schedule 15.01.2021

Источник: ledsshop.ru

Стиль жизни - Здоровье!