gpt4 book ai didi

c# - C# 中的设计时间序列化

转载 作者:太空狗 更新时间:2023-10-29 21:37:21 25 4
gpt4 key购买 nike

我在 C# 中创建了一个非可视化组件,它被设计为表单上元数据的占位符。
该组件具有一个属性,该属性是自定义对象的集合,该对象被标记为可序列化并实现用于序列化的 GetObjectData 和用于反序列化的公共(public)构造函数。

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

我已经尝试更改构造函数以在类中的每个属性周围有一个 try/catch block

try
{
_Name = info.GetString("Name");
}
catch (SerializationException)
{
this._Name = string.Empty;
}

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

我更愿意使用xml序列化,因为我至少可以看到它,这可能吗供设计师使用?

有没有办法让序列化更稳定,更不易被更改?

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

Rules 类也是一个组件,具有属性 DesignTimeVisible(false) 以阻止它在组件托盘中显示,该类未标记为可序列化。

将集合标记为可序列化会在 resx 文件中生成二进制数据(不理想),IDE 会报告规则类不可序列化。

我认为这个问题已经超越了一个简单的问题。所以我可能会很快关闭它。
如果任何人有任何类似的东西的链接,那将有很大帮助。

最佳答案

您可能想尝试另一种方法,将所有内容序列化为生成的代码。要做到这一点很容易。只需从 Component 实现您的非可视化类。然后按原样公开您的集合,但确保放入集合中的每个对象本身都是从 Component 派生的。通过这样做,一切都是代码生成的。

关于c# - C# 中的设计时间序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/155852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com