如何配置Bson序列化器:序列化忽略属性,反序列化保留
实现Bson序列化忽略属性但反序列化保留读取的方案
方法一:使用BsonIgnoreWhenWriting特性
直接在目标属性上标注[BsonIgnoreWhenWriting]特性,这是MongoDB官方驱动原生支持的特性,恰好满足你的需求:序列化时不会将该属性写入Bson文档,但反序列化时依然能从文档中读取该属性值。
示例代码:
public class YourEntity { public ObjectId Id { get; set; } // 序列化时忽略,反序列化时正常读取 [BsonIgnoreWhenWriting] public string IgnoreOnWriteButReadOnDeserialize { get; set; } public string NormalProperty { get; set; } }
方法二:通过ClassMap手动配置
如果不想用特性(比如需要动态配置规则),可以通过BsonClassMap手动设置属性的序列化逻辑:
示例代码:
BsonClassMap.RegisterClassMap<YourEntity>(cm => { cm.AutoMap(); // 定位目标属性,设置序列化时忽略 cm.GetMemberMap(x => x.IgnoreOnWriteButReadOnDeserialize) .SetIgnoreIfDefault(false) // 确保默认值不影响反序列化逻辑 .SetIgnoreWhenWriting(true); });
补充说明
BsonIgnoreWhenWriting无需自定义序列化器,直接使用即可,简单高效。- 若使用的是其他Bson序列化库(如Newtonsoft.Json的Bson转换器),可通过自定义
ContractResolver实现类似逻辑:序列化阶段跳过目标属性,反序列化阶段保留解析逻辑。
内容的提问来源于stack exchange,提问作者Feeze
相关产品推荐
相关产品推荐

