Вопросы

Ожидается, что 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

Читать:
Не удается подключиться к базе данных MySQL из Monodevelop в Linux Mint

Из 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

Похожие записи

Преобразовать вложенный массив в новое измерение

admin

google-cloud / firestore: ошибка: 4 DEADLINE_EXCEEDED: крайний срок превышен при создании документа

admin

Как загрузить набор данных CelebA в Google Colab с помощью Torch Vision, не исчерпывая памяти?

admin

Невозможно отправить сигнал с помощью pthread_cond_signal другому процессу в C

admin

Dynamodb-serverless отношения один ко многим и многие ко многим

admin

Используйте препроцессор gcc, чтобы определить имя файла для #include

admin