同じ「publicObjectIdId」があるのはなぜですか。それぞれの派生クラスで?それは本当に良い考えではありません。親IDフィールドを非表示にします。
問題を解決するには、派生クラスを「登録」する必要があります(他のシリアル化/逆シリアル化メカニズムと同様)。これを行うには、次の3つの方法があります。
-
宣言型 -基本ノードクラスを次のように装飾します:
[BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
-
一般的な方法 -コンパイル時に型がわかっている場合:
BsonClassMap.RegisterClassMap<PlotNode>(); BsonClassMap.RegisterClassMap<EndNode>();
-
動的な方法 -コンパイル時に型が不明な場合:
BsonClassMap.LookupClassMap(typeof(PlotNode)); BsonClassMap.LookupClassMap(typeof(EndNode));
-
別の提案 -クエリの代わりにLINQを使用する
Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);