Per farla breve:si tratta di convenzioni. Il driver MongoDB .NET espone la classe statica ConventionRegistry
che ti consente di registrare le tue convenzioni (altro qui
). Inoltre ci sono due convenzioni "integrate" __defaults__
e __attributes__
. Scavo più a fondo (driver github
) puoi scoprire che registra una convenzione piuttosto interessante:
new NamedIdMemberConvention(new [] { "Id", "id", "_id" })
Ciò significa che id
i membri saranno considerati come normali elementi BSON _id.
Come risolverlo?
Puoi eliminare le convenzioni predefinite
ConventionRegistry.Remove("__defaults__");
Tuttavia, automaticamente eliminerai tutte le altre convenzioni del driver, il che è piuttosto rischioso. In alternativa puoi creare una proprietà fake che sarà sempre vuota:
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
[BsonId]
public ObjectId FakeId { get; set; }
}
oppure puoi semplicemente usare BsonNoId
attributo quale
[BsonNoId]
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
}
Quindi la convenzione imposterà il tuo id
come IdMember nella mappa della classe, ma durante la post-elaborazione questo attributo forzerà IdMember a essere nullo e la tua classe verrà deserializzata con successo