Реализация абстрактного класса десериализации .Net Core C # - PullRequest
0 голосов
/ 17 октября 2019

Краткое объяснение: Проект в Angular и .NetCore, где я пытаюсь обновить список абстрактных классов в своем бэкэнде. Создавая запрос на поставку, я обновляю модель контейнера, которая содержит список, который я хочу обновить. Интерфейс сериализует модель контейнера с JSON.stringify();

Когда мой запрос пут достигает моей конечной точки, он сразу же начинает десериализацию. И я получаю исключение: System.NotSupportedException: десериализация ссылочных типов без конструктора без параметров не поддерживается. Тип «Плитка».

Это исключение не удивляет меня, потому что абстрактный класс не может быть создан. Поэтому я попытался использовать пользовательский JsonConverter, который определяет, когда преобразовывать в какой класс. Но этот конвертер никогда не вызывается. У меня есть точка останова в методе ReadJson, но исключение выдается до того, как оно достигнет точки останова.

Пользовательский JsonConverter

Абстрактная модель

Реализация абстрактного класса

Поместить конечную точку

Обновление:

Поэтому, продолжив пару часов, я обнаружил, что мой проект использует System.Text.Json.Serialization для сериализации объекта. Созданный мной CostumConverter - это Newtonsoft. Вот почему это, вероятно, не называется. Есть ли способ указать моему проекту, какой использовать? У меня есть файл startup.cs, в который, я думаю, могут пойти такие вещи.

1 Ответ

0 голосов
/ 17 октября 2019

вы можете использовать параметр универсального типа, позволяющий указывать произвольный тип T для метода во время компиляции, без указания конкретного типа в объявлении метода или класса.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/generic-type-parameters

...