Pour faire court :tout est une question de conventions. Le pilote MongoDB .NET expose la classe statique ConventionRegistry
qui vous permet d'enregistrer vos propres conventions (plus ici
). De plus, il existe deux conventions "intégrées" __defaults__
et __attributes__
. Creuser plus profondément (pilote github
) vous pouvez constater qu'il enregistre une convention assez intéressante :
new NamedIdMemberConvention(new [] { "Id", "id", "_id" })
Ce qui signifie que id
les membres seront considérés comme des éléments BSON _id normaux.
Comment résoudre ce problème ?
Vous pouvez vous débarrasser des conventions par défaut
ConventionRegistry.Remove("__defaults__");
Cependant, vous supprimerez automatiquement toutes les autres conventions de pilote, ce qui est assez risqué. Vous pouvez également créer une fausse propriété qui sera toujours vide :
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
[BsonId]
public ObjectId FakeId { get; set; }
}
ou vous pouvez simplement utiliser BsonNoId
attribut qui
[BsonNoId]
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
}
La convention définira donc votre id
comme IdMember dans le mappage de classe, mais lors du post-traitement, cet attribut forcera IdMember à être nul et votre classe sera désérialisée avec succès