蒙古的压倒性歧视者

时间:2012-08-30 17:18:11

标签: c# mongodb

我有以下类结构:

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>

有什么想法吗?谢谢,

1 个答案:

答案 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
{

}