c# – 使用空属性设置器时引发Visual Studio警告

我需要创建一个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不适合你,但序列化器正常运行.

点赞