У меня есть базовый класс 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; }
для свойства дискриминатора не зарегистрировано сопоставление
У меня есть базовый класс Product, который использует свойство дискриминатора для различения различных типов продуктов. Я также использую AutoMapper для сопоставления DTO и этих полиморфных типов. Однако во время выполнения я столкнулся со следующей ошибкой: для свойства дискриминатора не зарегистрировано сопоставление [code]// Configure services builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
// 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; }
[/code] для свойства дискриминатора не зарегистрировано сопоставление