我有以下类结构:
public class Parent {
public List<Child> Children { get; set; }
}
public class Child {
}
public class MyParent : Parent {
}
public class MyChild : Child {
}
我创建了MyParent的一个实例,并向My Children添加了一个MyChild实例。
当我将MyParent保存到Mongo时,希望类型为“Parent”,并将每个子类型设置为“Child”。相反,它将类型设置为MyParent,将每个子设置为MyChild,然后另一个不知道MyParent和MyChild的程序无法处理它。
我尝试将[BsonDiscriminator(“Parent”)]添加到'MyParent'之上,并且与MyChild相同,它正确设置了'_t'值,但后来我在反序列化的应用程序中遇到了一个模糊的类错误。 / p>
有什么想法吗?谢谢,
答案 0 :(得分:1)
对于两个类,你不能拥有相同的鉴别器(这就是为什么你得到一个关于模棱两可的鉴别器的错误信息)。
这是一个非常奇怪的情况,让你的课程结构与你在其他语言中所做的相匹配不是更好吗?
在任何情况下,您都可以通过为基类使用不同的鉴别器来解决歧义(可能永远不会出现在您的数据库中......)。
[BsonDiscriminator("BaseParent")]
public class Parent
{
public ObjectId Id { get; set; }
public List<Child> Children { get; set; }
}
[BsonDiscriminator("BaseChild")]
public class Child
{
}
[BsonDiscriminator("Parent")]
public class MyParent : Parent
{
}
[BsonDiscriminator("Child")]
public class MyChild : Child
{
}