MongoDB C# 驱动程序不会自动映射 pascal-cased 属性

Ben*_*ter 5 mongodb mongodb-.net-driver

我正在使用官方的 MongoDB C# 驱动程序来查询使用驼峰式属性名称的现有文档集合,例如post.title.

文档似乎表明不需要将文档映射到具有 pascal-cased 属性名称的 C# POCO,例如:

public class Post
{
    public ObjectId Id { get; set; }
    public string Title { get; set; }
    public string[] Tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,在尝试查询集合时,出现异常:

元素“title”与 MongoDBDemo.Post 类的任何字段或属性都不匹配。

如果变Post.TitlePost.title查询成功执行。

有没有办法告诉驱动程序反序列化为 pascal-cased 属性并默认序列化为驼峰式属性?

Sна*_*ƒаӽ 5

我知道这已经很老了,但我发现以下内容可用于将文档中的驼峰式字段映射到 C# POCO 中的 PascalCased 属性:

var conventionPack = new ConventionPack
{
    new CamelCaseElementNameConvention()
};

ConventionRegistry.Register(
    name: "CustomConventionPack", 
    conventions: conventionPack,
    filter: t => true);
Run Code Online (Sandbox Code Playgroud)

对于我正在使用的过滤器t => true,这个驼峰命名规则适用于我的所有实体/集合。

这种方法相对于使用BsonElement属性的优势在于,当实体/POCO 与其中包含 mongodb 驱动程序引用的项目不在同一个项目中(例如,在存储库模式中,或在干净的架构中)时,可以使用这种方法。

这里的官方文档中阅读更多内容。


yao*_*ing -1

向属性添加一个属性即可解决问题:

public class Post
{

    [BsonElement("_id")]
    public ObjectId Id { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

另外,如果数据库中有任何类中不存在的内容,请添加属性

[BsonIgnoreExtraElements(true)]
Run Code Online (Sandbox Code Playgroud)

以避免收到之前的错误消息。

命名空间 MongoDB.Bson.Serialization.Attributes 中还有一些其他属性。在此处查找文档。