如何在不修改C#类属性名的情况下将MongoDB存储键设为小写?
解决MongoDB存储文档键为小写的方案
问题原因
你当前使用的Newtonsoft.Json.JsonProperty特性仅适用于JSON.NET的序列化场景,而MongoDB官方驱动默认采用自身的Bson序列化机制,因此该特性不会对MongoDB的存储生效,导致文档键还是以C#属性名的首字母大写形式存储。
方法一:给属性添加MongoDB原生特性
直接在C#类的属性上使用MongoDB驱动提供的[BsonElement]特性,指定存储时的小写键名,无需修改属性名:
using MongoDB.Bson.Serialization.Attributes; public class User { [BsonRepresentation(BsonType.ObjectId)] [BsonElement("_id")] public string? Id { get; set; } [BsonElement("name")] public string Name { get; set; } [BsonElement("email")] public string Email { get; set; } }
添加该特性后,MongoDB驱动会按照你指定的键名存储文档,完美匹配你期望的小写格式。
方法二:全局配置统一序列化规则
如果项目中有大量类需要统一使用小写键名,推荐全局配置序列化规则,自动将所有C#属性名转换为小写:
在初始化MongoDB客户端前,添加如下配置代码:
using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Conventions; // 创建自定义约定:将属性名转为全小写 var conventionPack = new ConventionPack { new ElementNameConvention(elementName => elementName.ToLower()) }; // 注册全局约定,对所有类型生效 ConventionRegistry.Register("LowercaseElementNames", conventionPack, type => true); // 初始化Mongo客户端 var client = new MongoClient("你的MongoDB连接字符串");
配置完成后,所有实体类的属性在存储到MongoDB时都会自动转为小写键名,无需逐个属性添加特性,适合大规模项目使用。
注意事项
- 确保已安装
MongoDB.Driver和MongoDB.Bson官方NuGet包,上述特性和配置均依赖于官方驱动。 - 已存储的首字母大写文档不会自动更新,若需统一格式,需要手动修改或通过脚本批量更新。
内容的提问来源于stack exchange,提问作者Rishabh soni
相关产品推荐
相关产品推荐

