Para encurtar a história:é tudo sobre convenções. O driver MongoDB .NET expõe a classe estática
ConventionRegistry
que permite que você registre suas próprias convenções (mais aqui
). Além disso, existem duas convenções "incorporadas" __defaults__
e __attributes__
. Indo mais fundo (driver github
) você pode descobrir que ele registra uma convenção bastante interessante:new NamedIdMemberConvention(new [] { "Id", "id", "_id" })
O que significa que
id
membros serão considerados como elementos BSON _id regulares. Como consertar isso?
Você pode se livrar das convenções padrão
ConventionRegistry.Remove("__defaults__");
No entanto, automaticamente você descartará todas as outras convenções de driver, o que é bastante arriscado. Alternativamente, você pode criar uma propriedade falsa que sempre estará vazia:
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
[BsonId]
public ObjectId FakeId { get; set; }
}
ou você pode simplesmente usar
BsonNoId
atributo que [BsonNoId]
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
}
Portanto, a convenção definirá seu
id
como IdMember no mapa de classes, mas durante o pós-processamento esse atributo forçará IdMember a ser nulo e sua classe será desserializada com sucesso