我已将文档插入到MongoDB中的集合中。
public class Product :BaseDocument, IProduct
{
public Guid ProductId { get; set; }
public string ProductName { get; set; }
public Guid AccountId { get; set; }
public List<IProductDetail> ProductDetailList { get; set; } = new List<IProductDetail>();
}
public class ProductDetail:IProductDetail
{
public Guid ProductDetailId { get; set; }
public string ProductDetailCode { get; set; }
}不过,当我试图检索它时,会发现一个错误。
public List<IProduct> GetProductsList(Guid accountId)
{
IEnumerable<IProduct> prodList = new List<Product>();
IMongoCollection<Product> products = _database.GetCollection<Product>("Products");
prodList = products.Find(m => m.AccountId == accountId).ToList();
return prodList.ToList();
}错误如下
System.FormatException:“反序列化类Entities.ProductDetail的ProductDetailList属性时出错:未知鉴别器值”ProductDetail“。”
我做错了什么?
发布于 2020-03-25 16:33:59
获得此错误的原因是MongoDB .NET驱动程序不知道如何解析IProductDetail,它试图实例化ProductDetail类,因为有一个_t字段表示存储在MongoDB中的该类型。
通常,您可以在这类BsonKnownTypes中使用多态情景,但它只适用于类和结构。因此,如果您想在这里保留某些类的层次结构,那么您需要引入一个抽象类并在那里应用这个属性。
[BsonKnownTypes(typeof(ProductDetail))]
public abstract class ProductDetailBase: IProductDetail
{
}
public class ProductDetail : ProductDetailBase
{
public Guid ProductDetailId { get; set; }
public string ProductDetailCode { get; set; }
}然后你可以使用:
public List<ProductDetailBase> ProductDetailList { get; set; } = new List<ProductDetailBase>();在这种情况下,您可以拥有一个类层次结构,MongoDB .NET驱动程序将在运行时将BSON文档反序列化为适当的子类。
https://stackoverflow.com/questions/60852251
复制相似问题