ben*_*rce 7 .net c# serialization
我在C#中创建了一个非可视组件,它被设计为表单上元数据的占位符.
该组件具有一个属性,该属性是自定义对象的集合,该对象标记为Serializable,并实现用于serilizing的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类不可序列化.
我认为这个问题超越了一个简单的问题.所以我很快就会关闭它.
如果有人有类似的东西的任何链接,将有很多帮助.
从那时起我就发现了自己错在哪里。
我正在实现自定义集合(继承自 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)
| 归档时间: |
|
| 查看次数: |
4848 次 |
| 最近记录: |