Om dat te doen denk ik dat je 2 opties hebt.
De eerste zou zijn om handmatig een klassenkaart uit te schrijven
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});
De tweede zou zijn om je klas te versieren met de volgende attributen
public class MyObj
{
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("foo")]
public string Foo { get; set; }
}
Het CSharp-stuurprogrammateam heeft een goede tutorial over serialisatie op de volgende link
http://docs.mongodb.org/ ecosysteem/tutorial/serialize-documents-with-the-csharp-driver/
Bijwerken
Ik heb zojuist het volgende geprobeerd en dit werkt voor mij, uiteraard weet ik zeker dat dit een veel vereenvoudigde versie van je code is, maar ik gok hoe het eruit zou kunnen zien.
Ik heb de twee klassenkaarten afzonderlijk geregistreerd en het BsonKnownType aan de basisklasse toegevoegd.
[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")));
}