Para hacer eso creo que tendrás 2 opciones.
La primera sería escribir un mapa de clase manualmente
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});
La segunda sería decorar tu clase con los siguientes atributos
public class MyObj
{
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("foo")]
public string Foo { get; set; }
}
El equipo de controladores de CSharp tiene un buen tutorial sobre serialización en el siguiente enlace
http://docs.mongodb.org/ ecosistema/tutorial/serializar-documentos-con-el-controlador-csharp/
Actualizar
Acabo de intentar lo siguiente y esto funciona para mí, obviamente estoy seguro de que esta es una versión mucho más simplificada de su código, pero adivino cómo podría verse.
Registré los dos mapas de clase por separado y agregué BsonKnownType a la clase base.
[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")));
}