将 MongoDB 文档序列化为 POCO 时,有什么方法可以使属性映射不区分大小写?例如,我想要这份文件:
{
"id": "1"
"foo": "bar"
}
映射到这个类:
public MyObj
{
public int Id {get; set;}
public string Foo {get; set;}
}
将 MongoDB 文档序列化为 POCO 时,有什么方法可以使属性映射不区分大小写?例如,我想要这份文件:
{
"id": "1"
"foo": "bar"
}
映射到这个类:
public MyObj
{
public int Id {get; set;}
public string Foo {get; set;}
}
为此,我认为您将有两个选择。
第一个是手动写出类映射
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});
第二个是用以下属性装饰你的班级
public class MyObj
{
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("foo")]
public string Foo { get; set; }
}
CSharp 驱动程序团队在以下链接上有一个很好的序列化教程
http://docs.mongodb.org/ecosystem/tutorial/serialize-documents-with-the-csharp-driver/
我刚刚尝试了以下方法,这对我有用,显然我确信这是您的代码的一个更加简化的版本,但会猜测它的外观。
我已经分别注册了两个类映射并将 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")));
}
我看到这是一个老问题,但人们仍然可以搜索它。至少我在问同样的问题时发现了它。
可CamelCaseElementNameConvention
用于全局应用。
var pack = new ConventionPack();
pack.Add(new CamelCaseElementNameConvention());
ConventionRegistry.Register("Camel case convention", pack, t => true);
文档:https ://mongodb.github.io/mongo-csharp-driver/2.14/reference/bson/mapping/conventions/