MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Désérialisation des types polymorphes avec MongoDB C# Driver

Pourquoi avez-vous le même "ID ObjectId public ?" dans chaque classe dérivée ?Ce n'est pas vraiment une bonne idée. Il masque le champ d'identification parent.

Pour résoudre votre problème, vous devez "enregistrer" vos classes dérivées (comme dans tout mécanisme de sérialisation/désérialisation). Il existe 3 façons de procéder :

  1. Méthode déclarative - décorer la classe Node de base avec :

    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    
  2. Méthode générique - lorsque les types sont connus à la compilation :

    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    
  3. Manière dynamique - lorsque les types sont inconnus à la compilation :

    BsonClassMap.LookupClassMap(typeof(PlotNode));
    BsonClassMap.LookupClassMap(typeof(EndNode));
    

  • Une autre suggestion - utiliser LINQ au lieu de Query

    Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);