MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Deserializzare tipi polimorfici con MongoDB C# Driver

Perché hai lo stesso "ID ObjectId pubblico"; in ogni classe derivata? Non è proprio una buona idea. Nasconde il campo ID genitore.

Per risolvere il tuo problema devi "registrare" le tue classi derivate (come in qualsiasi meccanismo di serializzazione/deserializzazione). Ci sono 3 modi per farlo:

  1. Modalità dichiarativa - decorare la classe Node base con:

    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    
  2. Modo generico - quando i tipi sono noti in fase di compilazione:

    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    
  3. Modo dinamico - quando i tipi sono sconosciuti in fase di compilazione:

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

  • Un altro suggerimento - usa LINQ invece di Query

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