For at gøre det tror jeg, du har 2 muligheder.
Den første ville være at skrive et klassekort manuelt
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});
Den anden ville være at dekorere din klasse med følgende egenskaber
public class MyObj
{
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("foo")]
public string Foo { get; set; }
}
CSharp-førerteamet har en god vejledning om serialisering på følgende link
http://docs.mongodb.org/ økosystem/tutorial/serialize-documents-with-the-csharp-driver/
Opdater
Jeg har lige prøvet følgende, og det virker for mig. Jeg er selvfølgelig sikker på, at dette er en meget mere forenklet version af din kode, men jeg vil gerne gætte på, hvordan den kan se ud.
Jeg har registreret de to klassekort separat og tilføjet BsonKnownType til basisklassen.
[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")));
}