Istnieje możliwość serializacji/deserializacji klas, w których właściwości są tylko do odczytu. Jeśli próbujesz utrzymać ignorancję trwałości obiektów domeny, nie będziesz chciał używać BsonAttributes do prowadzenia serializacji, a jak już wspomniałeś, Automapping wymaga właściwości odczytu/zapisu, więc musisz samodzielnie zarejestrować mapy klas. Na przykład klasa:
public class C {
private ObjectId id;
private int x;
public C(ObjectId id, int x) {
this.id = id;
this.x = x;
}
public ObjectId Id { get { return id; } }
public int X { get { return x; } }
}
Można mapować za pomocą następującego kodu inicjującego:
BsonClassMap.RegisterClassMap<C>(cm => {
cm.MapIdField("id");
cm.MapField("x");
});
Pamiętaj, że pola prywatne nie mogą być tylko do odczytu. Zauważ również, że deserializacja omija twój konstruktor i bezpośrednio inicjuje pola prywatne (serializacja .NET również działa w ten sposób).
Oto pełny przykładowy program, który to testuje: