Para resumir:se trata de convenciones. El controlador MongoDB .NET expone la clase estática ConventionRegistry
que le permite registrar sus propias convenciones (más aquí
). Además, hay dos convenciones "incorporadas" __defaults__
y __attributes__
. Profundizando (controlador github
) puede encontrar que registra una convención bastante interesante:
new NamedIdMemberConvention(new [] { "Id", "id", "_id" })
Lo que significa que id
los miembros serán considerados como elementos regulares BSON _id.
¿Cómo arreglar eso?
Puedes deshacerte de las convenciones predeterminadas
ConventionRegistry.Remove("__defaults__");
Sin embargo, eliminará automáticamente todas las demás convenciones de controladores, lo que es bastante arriesgado. Alternativamente, puede crear una propiedad falsa que siempre estará vacía:
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
[BsonId]
public ObjectId FakeId { get; set; }
}
o simplemente puede usar BsonNoId
atributo que
[BsonNoId]
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
}
Entonces, la convención establecerá su id
como IdMember en el mapa de clase, pero luego, durante el procesamiento posterior, este atributo obligará a IdMember a ser nulo y su clase se deserializará con éxito