在 MongoDB 中为 MemberMap 指定自定义序列化程序 - 一个实例还是多个实例?

Specifying Custom Serializer for MemberMap in MongoDB - One Instance or Many?

提问人:John Saunders 提问时间:5/29/2015 最后编辑:John Saunders 更新时间:5/29/2015 访问量:120

问:

在为单个属性指定自定义序列化时,我目前为每种情况使用一个单独的实例:

BsonClassMap.RegisterClassMap<MyClass>(map =>
{
    map.AutoMap();
    map.SetIgnoreExtraElements(true);
    map.MapProperty(p=>Property1).SetSerializer(new MyCustomSerializer());
    map.MapProperty(p=>Property2).SetSerializer(new MyCustomSerializer());
}

我可以在这两种情况下指定相同的实例吗?

var ser = new MyCustomSerializer();
map.MapProperty(p=>Property1).SetSerializer(ser);
map.MapProperty(p=>Property2).SetSerializer(ser);

怀疑这是可以的,因为可以使用

[BsonSerializer(typeof(MyCustomSerializer))]
public string Property1 { get; set; }
[BsonSerializer(typeof(MyCustomSerializer))]
public string Property2 { get; set; }

这没有使用任何实例

MongoDB 序列化 mongodb-.net-driver

评论


答:

1赞 Craig Wilson 5/29/2015 #1

由于它是您的自定义序列化程序,因此您需要确保在实例级别不存储任何状态。从司机的角度来看,我们不在乎。

仅供参考:当您使用属性表单时,我们使用默认 ctor 创建序列化程序的 2 个独立实例。因此,您的代码版本会有所不同,尽管只要您的序列化程序运行良好就无关紧要。

评论

0赞 John Saunders 5/29/2015
好的,那太好了。我们最终可能会对多个类中的属性使用相同的序列化程序,并且可能希望每个类一个实例。