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.Title到Post.title查询成功执行。
有没有办法告诉驱动程序反序列化为 pascal-cased 属性并默认序列化为驼峰式属性?
我知道这已经很老了,但我发现以下内容可用于将文档中的驼峰式字段映射到 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 中还有一些其他属性。在此处查找文档。
| 归档时间: |
|
| 查看次数: |
2522 次 |
| 最近记录: |