MongoDB C# Driver中如何将可空枚举类型映射为字符串
错误原因
报错的根本原因是你配置的EnumSerializer<Gender>仅适配非可空的Gender值类型,和属性的Nullable<Gender>(即Gender?)类型不匹配。
解决方案
方案1:单个字段单独配置
直接用MongoDB驱动自带的NullableSerializer把枚举序列化器包裹一层即可,修改你的类映射配置代码:
BsonClassMap.RegisterClassMap<Person>(map => { map.AutoMap(); map.SetIgnoreExtraElements(true); map.MapMember(x => x.Gender) .SetSerializer(new NullableSerializer<Gender>(new EnumSerializer<Gender>(BsonType.String))); });
方案2:全局注册可空枚举序列化器
如果项目中多处用到Gender?类型,不需要每个类单独配置,程序初始化时全局注册一次即可:
BsonSerializer.RegisterSerializer( new NullableSerializer<Gender>(new EnumSerializer<Gender>(BsonType.String)) );
效果验证
配置完成后:
- 当
Gender属性为null时,MongoDB中会存储为null值 - 当
Gender属性有值时,会序列化为"Male"/"Female"字符串存储,反序列化时也能自动映射回对应的枚举值
内容的提问来源于stack exchange,提问作者dhrm
相关产品推荐
相关产品推荐

