Pour ce faire, je pense que vous aurez 2 options.
La première serait d'écrire une carte de classe manuellement
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});
La seconde serait de décorer votre classe avec les attributs suivants
public class MyObj
{
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("foo")]
public string Foo { get; set; }
}
L'équipe de pilotes CSharp a un bon tutoriel sur la sérialisation sur le lien suivant
http://docs.mongodb.org/ ecosystem/tutorial/serialize-documents-with-the-csharp-driver/
Mettre à jour
Je viens d'essayer ce qui suit et cela fonctionne pour moi, évidemment, je suis sûr qu'il s'agit d'une version beaucoup plus simplifiée de votre code, mais en essayant de deviner à quoi cela pourrait ressembler.
J'ai enregistré les deux cartes de classe séparément et ajouté le BsonKnownType à la classe de 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")));
}