如何强制在designer.cs中序列化新属性

时间:2011-05-06 10:05:53

标签: c# serialization windows-forms-designer

我在组件中添加了一个新属性,以唯一标识项目中的每个gridcontrol,称为GridIdentifier:

public class MyCustomGridControl : GridControl
{
    private string gridIdentifier = "empty";

    [Browsable(true)]
    [DefaultValue("empty")]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public string GridIdentifier
    {
        get { return gridIdentifier; }
        set { gridIdentifier = value; }
    }

    public MyCustomGridControl()
    {
        if (this.gridIdentifier == "empty")
            this.gridIdentifier = Guid.NewGuid().ToString();
    }
}

问题是,对于表单中的现有控件,表单只在我更改表单中的内容(read:anything)后序列化新属性。它可能是形式,大小等的标题。

但我想看到的是,当我打开它时,它检测到表单已经更改,因此我可以保存它并且新属性被序列化。

有没有人知道打开表单后如何保存新属性以及如何修复它?当然,任何其他有用的想法也会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我猜它正在进行基本的健全性检查(即应该任何事情已经改变) - 以防止意外的源代码更改(我讨厌它在打开文件时可能导致副作用 - 我在看着你,DBML!)。

另一方面,强制序列化一般(由于上述原因,我不认为它会适用):

public bool ShouldSerializeGridIdentifier() { return true; }

bool ShouldSerialize*()void Reset*()是框架使用的约定。