MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Deserialisieren polymorpher Typen mit dem MongoDB C#-Treiber

Warum haben Sie dieselbe "öffentliche ObjectId-ID"? in jeder abgeleiteten Klasse? Es ist keine wirklich gute Idee. Es verbirgt das übergeordnete ID-Feld.

Um Ihr Problem zu lösen, müssen Sie Ihre abgeleiteten Klassen "registrieren" (wie bei jedem Serialisierungs-/Deserialisierungsmechanismus). Es gibt drei Möglichkeiten, dies zu tun:

  1. Deklarativer Weg - Basisknotenklasse dekorieren mit:

    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    
  2. Generischer Weg - wenn Typen zur Kompilierzeit bekannt sind:

    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    
  3. Dynamischer Weg - wenn Typen zur Kompilierzeit unbekannt sind:

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

  • Noch ein Vorschlag - Verwenden Sie LINQ anstelle von Query

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