C#中枚举注入MongoDB聚合管道未按字符串序列化问题问询
问题1解答
该问题既不是Dictionary导致的,也不是BsonDocument本身的逻辑问题,核心原因是:[BsonRepresentation]特性默认是作用在实体类的属性映射场景下的,当你直接将枚举值作为object类型传入BsonDocument构造时,序列化器没有关联到该枚举类型的序列化配置上下文,不会主动读取枚举上的特性,只会走默认的枚举序列化逻辑,直接输出枚举对应的底层整数值。你就算不使用Dictionary,直接写new BsonDocument("status", Status.Created)也会得到同样的整数值结果。
问题2解答
完全可以通过注册自定义序列化器的方式一劳永逸解决,不需要修改现有枚举的特性,也不需要手动加ToString()。
你只需要在应用启动阶段,给该枚举单独注册一次字符串类型的枚举序列化器即可:
// 程序初始化时执行一次即可 BsonSerializer.RegisterSerializer(new EnumSerializer<Status>(BsonType.String));
注册完成后,所有直接传入Status枚举值的场景(包括聚合管道、普通查询、插入更新等),都会自动序列化为字符串形式,完全匹配你库里存储的枚举字段格式。
如果你希望所有枚举都默认序列化为字符串,可以全局配置默认枚举序列化规则,不过更推荐针对单独枚举注册,避免影响其他业务逻辑。
内容的提问来源于stack exchange,提问作者Woody1193
相关产品推荐
相关产品推荐

