そのためには、2つの選択肢があると思います。
1つ目は、クラスマップを手動で書き出すことです
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});
2つ目は、次の属性でクラスを装飾することです
public class MyObj
{
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("foo")]
public string Foo { get; set; }
}
CSharpドライバーチームには、次のリンクでシリアル化に関する優れたチュートリアルがあります
http://docs.mongodb.org/エコシステム/チュートリアル/serialize-documents-with-the-csharp-driver/
更新
私は次のことを試しましたが、これは私にとってはうまくいきます。明らかに、これはコードのはるかに単純化されたバージョンであると確信していますが、どのように見えるかを推測しています。
2つのクラスマップを別々に登録し、BsonKnownTypeを基本クラスに追加しました。
[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")));
}