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

本文关键字:新属性 序列化 属性 designer cs | 更新日期: 2023-09-27 17:54:59

我为组件添加了一个新属性,以唯一地标识项目中的每个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();
    }
}

问题是,对于现有的控件在我的表单,表单只序列化新的属性后,我改变了一些东西(读取:任何)在表单。它可能是表单的标题,大小等。

但是我想看到的是,当我打开它时,它检测到表单发生了变化,所以我可以保存它,新的属性被序列化。

有没有人知道为什么新的属性没有得到保存后打开表单,以及如何修复它?如果有任何其他的帮助,我们当然也很感激。

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

我猜它正在做基本的完整性检查(即应该任何更改)-以防止意外的源代码更改(我讨厌在打开文件时它会导致副作用-我看着你,DBML!)。

另外,强制序列化通常是(由于上面的原因,我认为它不适用):
public bool ShouldSerializeGridIdentifier() { return true; }

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