sql >> Database >  >> NoSQL >> MongoDB

Polymorfe typen deserialiseren met MongoDB C# Driver

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:

  1. Declaratieve manier - versier de basis Node-klasse met:

    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    
  2. Algemene manier - wanneer typen bekend zijn tijdens het compileren:

    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    
  3. 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);
    



  1. Gedeeltelijke indexen in mongodb / mangoest

  2. Problemen met een MongoDB Sharded-cluster oplossen

  3. Groeperen op specifiek element van array met mongo-aggregatieframework

  4. Mongodb-shellscript uitvoeren via C#-stuurprogramma