首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我在.net中检索芒果文档时出错?

为什么我在.net中检索芒果文档时出错?
EN

Stack Overflow用户
提问于 2020-03-25 15:43:30
回答 1查看 74关注 0票数 1

我已将文档插入到MongoDB中的集合中。

代码语言:javascript
运行
复制
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; }
        }

不过,当我试图检索它时,会发现一个错误。

代码语言:javascript
运行
复制
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“。”

我做错了什么?

EN

Stack Overflow用户

回答已采纳

发布于 2020-03-25 16:33:59

获得此错误的原因是MongoDB .NET驱动程序不知道如何解析IProductDetail,它试图实例化ProductDetail类,因为有一个_t字段表示存储在MongoDB中的该类型。

通常,您可以在这类BsonKnownTypes中使用多态情景,但它只适用于类和结构。因此,如果您想在这里保留某些类的层次结构,那么您需要引入一个抽象类并在那里应用这个属性。

代码语言:javascript
运行
复制
[BsonKnownTypes(typeof(ProductDetail))]
public abstract class ProductDetailBase: IProductDetail
{
}

public class ProductDetail : ProductDetailBase
{
    public Guid ProductDetailId { get; set; }
    public string ProductDetailCode { get; set; }
}

然后你可以使用:

代码语言:javascript
运行
复制
public List<ProductDetailBase> ProductDetailList { get; set; } = new List<ProductDetailBase>();

在这种情况下,您可以拥有一个类层次结构,MongoDB .NET驱动程序将在运行时将BSON文档反序列化为适当的子类。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60852251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档