Hvorfor har du det samme "offentlige objekt-id"; i hver afledt klasse? Det er ikke rigtig god idé. Det skjuler overordnet-id-feltet.
For at løse dit problem skal du "registrere" dine afledte klasser (som i enhver serialiserings-/deserialiseringsmekanisme). Der er 3 måder at gøre det på:
-
Erklærende måde - dekorere base Node klasse med:
[BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
-
Generisk måde - når typer er kendt på kompileringstidspunktet:
BsonClassMap.RegisterClassMap<PlotNode>(); BsonClassMap.RegisterClassMap<EndNode>();
-
Dynamisk måde - når typer er ukendte på kompileringstidspunktet:
BsonClassMap.LookupClassMap(typeof(PlotNode)); BsonClassMap.LookupClassMap(typeof(EndNode));
-
Et andet forslag - brug LINQ i stedet for Query
Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);