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

Deserialisering af polymorfe typer med MongoDB C#-driver

Hvorfor har du det samme "offentlige objekt-id"; i hver afledt klasse? Det er ikke rigtig god idé. Det skjuler overordnet-id-feltet.

For at løse dit problem skal du "registrere" dine afledte klasser (som i enhver serialiserings-/deserialiseringsmekanisme). Der er 3 måder at gøre det på:

  1. Erklærende måde - dekorere base Node klasse med:

    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    
  2. Generisk måde - når typer er kendt på kompileringstidspunktet:

    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    
  3. Dynamisk måde - når typer er ukendte på kompileringstidspunktet:

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

  • Et andet forslag - brug LINQ i stedet for Query

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



  1. Hvordan trækker man en forekomst af et element i et array i MongoDB?

  2. Redis-transaktioner

  3. Sådan opdateres og ophæves flere dokumenter i MongoDB ved hjælp af C#-drivere

  4. MongoDB bedste praksis for referencer