Възможно е да се сериализират/десериализират класове, където свойствата са само за четене. Ако се опитвате да запазите устойчивостта на обектите на вашия домейн в неведение, няма да искате да използвате BsonAttributes за насочване на сериализацията и както посочихте AutoMapping изисква свойства за четене/запис, така че ще трябва сами да регистрирате картите на класовете. Например класът:
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; } }
}
Може да се картографира с помощта на следния код за инициализация:
BsonClassMap.RegisterClassMap<C>(cm => {
cm.MapIdField("id");
cm.MapField("x");
});
Имайте предвид, че частните полета не могат да бъдат само за четене. Обърнете внимание също, че десериализацията заобикаля вашия конструктор и директно инициализира частните полета (.NET сериализацията също работи по този начин).
Ето пълна примерна програма, която тества това: