小编Qua*_*uad的帖子

使用MongoDB C#Driver反序列化多态类型

假设,我有一个基类

public class Node{
    public ObjectId Id;
    public String nodeName;
    public ObjectId parentNode;
}
Run Code Online (Sandbox Code Playgroud)

和2个派生类

public class PlotNode:Node{
    public ObjectId Id;
    public String plotDetail;
}

public class EndNode:Node{
    public ObjectId Id;
    public int resultCode;
}
Run Code Online (Sandbox Code Playgroud)

序列化的所有3个类的几个对象都在数据库中.

并且只有我拥有的数据是ObjectId的列表,并且只有这些ID的知识是它们肯定是Node ids,但是它们在反序列化时间内不知道它们是Node,PlotNode还是EndNode.

我用它来反序列化:

var collection = db.GetCollection<Node>("nodes");
var query = Query<Node>.EQ(e => e.Id, id);
Node node = collection.FindOne(query);
Run Code Online (Sandbox Code Playgroud)

最后我得到节点,而不是实际的PlotNodes或EndNodes.

我怎么知道它们是否是派生类型之一并获得该类型的对象?

c# mongodb deserialization mongodb-.net-driver

11
推荐指数
1
解决办法
7050
查看次数