MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Transmettre les informations de type à MongoDB afin qu'il puisse désérialiser correctement les types d'interface ?

À la suite de MyClass pointant vers un type d'interface, qui pourrait alors contenir n'importe quelle classe 'Bson qui implémente cette interface, nous devons indiquer à MongoDB le type de classe' qui peut à la fin de cette (toute) l'interface. Il peut alors déduire des classes qu'il sait comment désérialiser certains BsonDocuments contenant ces classes' Bson.

public interface IMyInterface
{
    String Name { get; set; }
}

public class MyIntImpl : IMyInterface
{
    public String Name { get; set; }
}

public class MyClass
{
    public IMyInterface IntRef { get; set; }

    public MyClass()
    {
        IntRef = new MyIntImpl();
    }
}

// When starting up MongoDB
private void RegisterClasses()
{
    BsonClassMap.RegisterClassMap<MyIntImpl>();
}

En ajoutant la classe MyIntImpl au BsonClassMap, il sait maintenant comment désérialiser Bson à partir de ce type de classe. Vous devez juste vous assurer de garder la carte remplie de classes qui implémentent des interfaces que vous pourriez sérialiser.

Quelques liens de référence :Haut à bas niveau présentation de la sérialisation C# MongoDB , un message SO qui décrit la solution.