我觉得这是一个转贴,但我似乎无法找到任何关于它的好信息.我只是想知道序列化实际上是如何工作的(实际上是反序列化).我想知道的是,如果说我有一个实际上没有私人领域支持的财产; 即:
public string SomeProp { get { return GetValue("SomePropKey"); } set{ SetValue("SomePropKey", value); } }
当我反序列化时,setter会被调用吗?getter在序列化时被调用,因为当我序列化对象时,正确的值被写入输出流.我知道这似乎是一种奇怪的情况,但究竟发生了什么?或者我只是让这复杂化....
它完全取决于您用于序列化的机制.
如果您正在使用XmlSerialization,那么是的,调用setter.
如果您正在使用数据协定序列化(DataContractSerialization),那么如果您将DataMember属性应用于属性(而不是其支持字段),则将调用getter/setter.
如果您在.NET中使用原始序列化机制(IFormatter实现),那么这种情况是不可能的,因为它只会序列化存储在字段中的值.