【发布时间】:2013-09-09 15:55:42
【问题描述】:
假设,我有一个基类
public class Node{
public ObjectId Id;
public String nodeName;
public ObjectId parentNode;
}
和 2 个派生类
public class PlotNode:Node{
public ObjectId Id;
public String plotDetail;
}
public class EndNode:Node{
public ObjectId Id;
public int resultCode;
}
所有3个类的几个对象都被序列化在数据库中。
我拥有的唯一数据是 ObjectId 的列表,关于这些 id 唯一知道的是它们肯定是 Node id,但在反序列化时不知道它们是 Node、PlotNode 还是 EndNode。
我正在使用它来反序列化:
var collection = db.GetCollection<Node>("nodes");
var query = Query<Node>.EQ(e => e.Id, id);
Node node = collection.FindOne(query);
最后我得到的是节点,而不是实际的 PlotNodes 或 EndNodes。
我如何知道它们是否是派生类型之一并取回该类型的对象?
【问题讨论】:
-
我实现此目的的唯一方法是使用自定义序列化程序并在序列化期间将派生类型写入 BsonDocument。然后,当您反序列化时,您会构造相应派生类型的对象。
-
这是我认为可以做到的方式之一,但我认为驱动程序本身会有一种内置方式。那我就这样吧,谢谢你的评论。
-
如果您遇到困难,请告诉我。我在序列化时写了
__t : { _type: '.net-type-string', _name: 'just the class name' }
标签: c# mongodb deserialization mongodb-.net-driver