È possibile serializzare/deserializzare classi in cui le proprietà sono di sola lettura. Se stai cercando di mantenere ignorata la persistenza degli oggetti di dominio, non vorrai utilizzare BsonAttributes per guidare la serializzazione e, come hai sottolineato, l'AutoMapping richiede proprietà di lettura/scrittura, quindi dovresti registrare tu stesso le mappe di classe. Ad esempio, la classe:
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; } }
}
Può essere mappato utilizzando il seguente codice di inizializzazione:
BsonClassMap.RegisterClassMap<C>(cm => {
cm.MapIdField("id");
cm.MapField("x");
});
Si noti che i campi privati non possono essere di sola lettura. Nota anche che la deserializzazione ignora il tuo costruttore e inizializza direttamente i campi privati (la serializzazione .NET funziona anche in questo modo).
Ecco un programma di esempio completo che verifica questo: