Невозможно сериализовать тип: «Продукт», поскольку для свойства дискриминатора нет зарегистрированного сопоставления.C#

Место общения программистов C#
Ответить
Anonymous
 Невозможно сериализовать тип: «Продукт», поскольку для свойства дискриминатора нет зарегистрированного сопоставления.

Сообщение Anonymous »

У меня есть базовый класс Product, который использует свойство дискриминатора для различения различных типов продуктов. Я также использую AutoMapper для сопоставления DTO и этих полиморфных типов. Однако во время выполнения я столкнулся со следующей ошибкой:
для свойства дискриминатора не зарегистрировано сопоставление

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

// Configure services
builder.Services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore;

options.SerializerSettings.Converters.Add(
JsonSubtypesConverterBuilder
.Of(typeof(Product), "ProductTypeId")
.RegisterSubtype(typeof(Type1), 1)
.RegisterSubtype(typeof(Type2), 2)
.RegisterSubtype(typeof(Type3), 3)
.RegisterSubtype(typeof(Type4), 4)
.SerializeDiscriminatorProperty()
.Build()
);
});
builder.Services.AddSwaggerGen(options =>
{
//features of Polymorphism to the swagger
options.SwaggerDoc("v1", new OpenApiInfo);
options.UseAllOfToExtendReferenceSchemas();
options.UseAllOfForInheritance();
options.UseOneOfForPolymorphism();
options.SelectDiscriminatorNameUsing(type =>
{
return type.Name switch
{
nameof(Product) => "ProductTypeId",
_ => null
};
});

// Base class for products
public abstract class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public ProductType ProductTypeId { get; set; }
public decimal Price { get; set; }
}

// Subtype class Type1
public class Type1 : Product
{
public string SpecificProperty1 { get; set; }
public int SpecificProperty2 { get; set; }
}

public class Type2 : Product
{
....
}

public class ProductType
{
public int ProductTypeId { get; set; }
public int DepartmentId { get; set; }
public string ProductTypeName { get; set; }
public virtual Department? Department { get; set; }

}

public class ProductTypeDTO
{
public int ProductTypeId { get; set; }
public int DepartmentId { get; set; }
public string ProductTypeName { get; set; }

для свойства дискриминатора не зарегистрировано сопоставление

Подробнее здесь: https://stackoverflow.com/questions/790 ... -mapping-f
Ответить

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

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

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

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

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