Untuk melakukan itu saya pikir Anda akan memiliki 2 pilihan.
Yang pertama adalah menulis peta kelas secara manual
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});
Yang kedua adalah mendekorasi kelas Anda dengan atribut berikut
public class MyObj
{
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("foo")]
public string Foo { get; set; }
}
Tim driver CSharp memiliki tutorial yang bagus tentang serialisasi di tautan berikut
http://docs.mongodb.org/ ekosistem/tutorial/serialize-documents-with-the-csharp-driver/
Perbarui
Saya baru saja mencoba yang berikut ini dan ini berhasil untuk saya, jelas saya yakin ini adalah versi kode Anda yang jauh lebih sederhana, tetapi coba tebak tampilannya.
Saya telah mendaftarkan dua peta kelas secara terpisah dan menambahkan BsonKnownType ke kelas dasar.
[BsonKnownTypes(typeof(GeoJSONObject))]
public class Point
{
public string Coordinates { get; set; }
}
public class GeoJSONObject : Point
{
public string Type { get; set; }
}
static void Main(string[] args)
{
var cn = new MongoConnectionStringBuilder("server=localhost;database=MyTestDB;");
var settings = MongoClientSettings.FromConnectionStringBuilder(cn);
var client = new MongoClient(settings);
BsonClassMap.RegisterClassMap<Point>(cm =>
{
cm.AutoMap();
cm.GetMemberMap(c => c.Coordinates).SetElementName("coordinates");
});
BsonClassMap.RegisterClassMap<GeoJSONObject>(cm =>
{
cm.AutoMap();
cm.GetMemberMap(c => c.Type).SetElementName("type");
});
var result = client.GetServer()
.GetDatabase("MyTestDB")
.GetCollection("MyCol")
.Find(Query.EQ("type", BsonValue.Create("xxxx")));
}