Исключение полиморфной десериализации System.Text.Json, когда $type не является первым свойствомC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Исключение полиморфной десериализации System.Text.Json, когда $type не является первым свойством

Сообщение Anonymous »

Я заметил некоторое поведение, которое меня удивило. У меня есть абстрактный базовый класс и производный класс.

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

[JsonPolymorphic]
[JsonDerivedType(typeof(DerivedClass), "derived")]
public abstract class BaseClass
{
public BaseClass() { }
}
public class DerivedClass : BaseClass
{
public string? Whatever { get; set; }
}
И теперь у меня есть две строки JSON: первая JSON имеет дискриминатор типа () как самое первое свойство в JSON - вторая строка JSON - нет. Когда я выполняю jsonserializer.deserialize () , на второй строке JSON выставлено исключение.

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

var jsonWorks = "{\"$type\": \"derived\", \"whatever\": \"Bar\"}";
var jsonBreaks = "{\"whatever\": \"Bar\", \"$type\": \"derived\"}";

var obj1 = JsonSerializer.Deserialize(jsonWorks);
var obj2 = JsonSerializer.Deserialize(jsonBreaks); // This one will throw an exception
Выбрасывается исключение типа System.NotSupportedException со следующим сообщением:

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

System.NotSupportedException: 'Deserialization of types without a parameterless constructor, a singular parameterized constructor, or a parameterized constructor annotated with 'JsonConstructorAttribute' is not supported. Type 'MyApp.BaseClass'. Path: $ | LineNumber: 0 | BytePositionInLine: 12.'
У него также есть внутреннее исключение:

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

NotSupportedException: Deserialization of types without a parameterless constructor, a singular parameterized constructor, or a parameterized constructor annotated with 'JsonConstructorAttribute' is not supported. Type 'MyApp.BaseClass'.
Ожидается ли такое поведение или это на самом деле потенциальная ошибка в System.Text.Json? Это было предпринято в net8.0.

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

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

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

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

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

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

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