我需要创建一个Serializable类.
在这个类中,我有一个MyGuid只读属性,我想要可序列化但不可反序列化(属性在后备字段中初始化).
使用基本序列化.NET功能,你知道,有一个reandonly属性使反序列化失败,因为它不能反序列化readonly属性.
因此,我决定使用支持字段创建一个公共get-set MyGuid属性,并使setter不执行任何操作:
[Serializable]
public class Task : ITask
{
private readonly Guid m_guid = Guid.NewGuid();
public MyGuid Guid
{
get { return m_guid; }
set { /*Empty setter!*/ }
}
}
现在我不想在我脚下射击……
我可以通过某种方式将MyGuid属性的setter设置为“可弃”或“禁用”?
如果我尝试使用setter,Visual Studio警告我会很好.
或者,有一种更好的方法来管理这种需求?
谢谢!
编辑:在这里找到一些东西:Serializing private member data我正在读…
最佳答案
public Guid Guid
{
get { return m_guid; }
set { if (value != null) Debugger.Log(0, "Warning", "This property has an empty setter, just for serializing purpose!"); }
}
如果您不小心自行设置了该值,则会在调试窗口中收到警告.另一方面,你绝对需要序列化器的setter,否则解串器永远不能在从文件中读取属性后指定属性值!所以setter不适合你,但序列化器正常运行.