För att göra det tror jag att du kommer att ha två alternativ.
Det första skulle vara att skriva ut en klasskarta manuellt
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});
Den andra skulle vara att dekorera din klass med följande attribut
public class MyObj
{
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("foo")]
public string Foo { get; set; }
}
CSharps förarteam har en bra handledning om serialisering på följande länk
http://docs.mongodb.org/ ekosystem/tutorial/serialize-documents-with-the-csharp-drivrutinen/
Uppdatera
Jag har precis provat följande och det här fungerar för mig, uppenbarligen är jag säker på att detta är en mycket mer förenklad version av din kod, men med en gissning om hur den kan se ut.
Jag har registrerat de två klasskartorna separat och lagt till BsonKnownType till basklassen.
[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")));
}