Để làm được điều đó, tôi nghĩ bạn sẽ có 2 lựa chọn.
Đầu tiên là viết bản đồ lớp theo cách thủ công
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});
Thứ hai là trang trí lớp học của bạn với các thuộc tính sau
public class MyObj
{
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("foo")]
public string Foo { get; set; }
}
Nhóm trình điều khiển CSharp có một hướng dẫn tốt về tuần tự hóa trên liên kết sau
http://docs.mongodb.org/ hệ sinh thái / hướng dẫn / serialize-Documents-with-the-csharp-driver /
Cập nhật
Tôi vừa thử cách sau và điều này phù hợp với tôi, rõ ràng tôi chắc chắn rằng đây là phiên bản mã đơn giản hơn nhiều nhưng hãy đoán xem nó có thể trông như thế nào.
Tôi đã đăng ký riêng hai bản đồ lớp và thêm BsonKnownType vào lớp cơ sở.
[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")));
}