Waarom heb je dezelfde "public ObjectId Id;" in elke afgeleide klasse? Het is niet echt een goed idee. Het verbergt het bovenliggende ID-veld.
Om uw probleem op te lossen, moet u uw afgeleide klassen "registreren" (zoals in elk mechanisme voor serialisatie/deserialisatie). Er zijn 3 manieren om dit te doen:
-
Declaratieve manier - versier de basis Node-klasse met:
[BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
-
Algemene manier - wanneer typen bekend zijn tijdens het compileren:
BsonClassMap.RegisterClassMap<PlotNode>(); BsonClassMap.RegisterClassMap<EndNode>();
-
Dynamische manier - wanneer typen onbekend zijn tijdens het compileren:
BsonClassMap.LookupClassMap(typeof(PlotNode)); BsonClassMap.LookupClassMap(typeof(EndNode));
-
Nog een suggestie - gebruik LINQ in plaats van Query
Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);