sql >> Base de Datos >  >> NoSQL >> MongoDB

Deserializar tipos polimórficos con MongoDB C# Driver

¿Por qué tiene el mismo "ID de ObjectId público"? en cada clase derivada? No es realmente una buena idea. Oculta el campo de identificación principal.

Para resolver su problema necesita "registrar" sus clases derivadas (como en cualquier mecanismo de serialización/deserialización). Hay 3 formas de hacerlo:

  1. Forma declarativa - decorar la clase de Nodo base con:

    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    
  2. Forma genérica - cuando los tipos se conocen en tiempo de compilación:

    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    
  3. Forma dinámica - cuando los tipos son desconocidos en tiempo de compilación:

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

  • Otra sugerencia - use LINQ en lugar de Query

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