Lange Rede kurzer Sinn:Es dreht sich alles um Konventionen. Der MongoDB .NET-Treiber macht die statische Klasse ConventionRegistry
verfügbar mit dem Sie Ihre eigenen Konventionen registrieren können (mehr hier
). Zusätzlich gibt es zwei "eingebaute" Konventionen __defaults__
und __attributes__
. Tiefer graben (Treiber github
) können Sie feststellen, dass es eine ziemlich interessante Konvention registriert:
new NamedIdMemberConvention(new [] { "Id", "id", "_id" })
Das bedeutet, dass id
Mitglieder werden als reguläre BSON _id-Elemente betrachtet.
Wie kann man das beheben?
Sie können Standardkonventionen entfernen
ConventionRegistry.Remove("__defaults__");
Sie werden jedoch automatisch alle anderen Treiberkonventionen fallen lassen, was ziemlich riskant ist. Alternativ können Sie eine gefälschte Eigenschaft erstellen, die immer leer ist:
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
[BsonId]
public ObjectId FakeId { get; set; }
}
oder Sie können einfach BsonNoId
verwenden Attribut welches
[BsonNoId]
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
}
Die Konvention wird also Ihre id
setzen als IdMember in der Klassenzuordnung, aber während der Nachbearbeitung erzwingt dieses Attribut, dass IdMember null ist, und Ihre Klasse wird erfolgreich deserialisiert