MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Desserializando tipos polimórficos com o driver MongoDB C#


Por que você tem o mesmo "Id ObjectId público"; em cada classe derivada? Não é uma boa ideia. Ele oculta o campo Id pai.

Para resolver seu problema, você precisa "registrar" suas classes derivadas (como em qualquer mecanismo de serialização/desserialização). Existem 3 maneiras de fazer isso:

  1. Maneira declarativa - decorar a classe base do Node com:
    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    

  2. Maneira genérica - quando os tipos são conhecidos em tempo de compilação:
    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    

  3. Maneira dinâmica - quando os tipos são desconhecidos em tempo de compilação:
    BsonClassMap.LookupClassMap(typeof(PlotNode));
    BsonClassMap.LookupClassMap(typeof(EndNode));
    



  • Outra sugestão - use LINQ em vez de Query
    Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);