C#中的设计时序列化

ben*_*rce 7 .net c# serialization

我在C#中创建了一个非可视组件,它被设计为表单上元数据的占位符.
该组件具有一个属性,该属性是自定义对象的集合,该对象标记为Serializable,并实现用于s​​erilizing的GetObjectData和用于deserilizing的公共构造器.

在表单的resx文件中,它将生成用于存储集合的二进制数据,但是每当我对序列化类进行更改时,我都会遇到设计器错误,需要从resx文件中手动删除数据,然后重新创建此数据.

我试过更改构造器,在类中的每个属性周围都有一个try/catch块

try
{
  _Name = info.GetString("Name");
}
catch (SerializationException)
{
  this._Name = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

但它仍然崩溃.我得到的最后一个错误是我必须实现IConvertible.

我更喜欢使用xml序列化,因为我至少可以看到它,设计师可以使用吗?

有没有办法使序列化更稳定,更不耐受变化?

编辑:
更多信息...更好的描述也许
我有一个继承自Component的类,它有一个属性是规则的集合.RulesCollection似乎必须标记为Serializable,否则它不会保留其成员.

Rules类也是一个具有属性DesignTimeVisible(false)的Component,用于阻止它在组件托盘中显示,此clas未标记为Serializable.

将标记为Serializable的集合生成resx文件中的二进制数据(不理想),IDE报告Rules类不可序列化.

我认为这个问题超越了一个简单的问题.所以我很快就会关闭它.
如果有人有类似的东西的任何链接,将有很多帮助.

ben*_*rce 3

从那时起我就发现了自己错在哪里。

我正在实现自定义集合(继承自 CollectionBase)的组件,我将其更改为 List 并将 DesignerSerializationVisibility(DesignerSerializationVisibility.Content) 属性添加到 List 属性,此列表也是只读的。然后,这将生成代码来生成所有组件属性和列表中的所有条目。

存储在列表中的类不需要任何特定属性或需要可序列化。

private List<Rule> _Rules;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<Rule> Rules
{
    get { return _Rules; }
}
Run Code Online (Sandbox Code Playgroud)