Krótko mówiąc:chodzi o konwencje. Sterownik MongoDB .NET udostępnia klasę statyczną ConventionRegistry
co pozwala na rejestrację własnych konwencji (więcej tutaj
). Dodatkowo istnieją dwie "wbudowane" konwencje __defaults__
i __attributes__
. Kopanie głębiej (sterownik github
) można zauważyć, że rejestruje jedną dość interesującą konwencję:
new NamedIdMemberConvention(new [] { "Id", "id", "_id" })
Co oznacza, że id
członkowie będą traktowani jako zwykłe elementy BSON _id.
Jak to naprawić?
Możesz pozbyć się domyślnych konwencji
ConventionRegistry.Remove("__defaults__");
Jednak automatycznie porzucisz wszystkie inne konwencje sterowników, co jest dość ryzykowne. Alternatywnie możesz utworzyć fałszywą właściwość, która zawsze będzie pusta:
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
[BsonId]
public ObjectId FakeId { get; set; }
}
lub możesz po prostu użyć BsonNoId
atrybut, który
[BsonNoId]
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
}
Więc konwencja będzie ustawiać twój id
jako IdMember w mapie klas, ale podczas postprocessingu ten atrybut zmusi IdMember do wartości null, a twoja klasa zostanie pomyślnie zdeserializowana