我有一个调试器可视化器,用于以数据表的形式查看类对象列表。但是代码的限制是类应该是可序列化的,即应该标记为[Serializable],如果类没有被标记为可序列化,那么调试器就会崩溃。那么,如果类未标记为可序列化,任何人都可以告诉我如何在运行时使类可序列化。
5 回答
您不能在运行时修改现有类的元数据。
任何具有公共 get/set 属性的类都是 XmlSerializable。您可以改用 XML 序列化程序吗?
一个类缺少 [Serializable] 的事实可以用两种方式来解释。这可能是遗漏错误,这是更常见的情况。或者该类根本不支持序列化。这并不罕见,类通常依赖于在反序列化时无法忠实再现的状态,因为它依赖于全局程序状态。任何 Windows 窗体控件都是一个很好的例子,如果没有处于所需状态的本机 Windows 窗口,它们就无法反序列化,这种状态通常还需要创建其他窗口(如容器窗口)和许多消息。
好吧,这不会帮助您实现可视化器。您无法通过序列化可靠地实现它。但是,使用反射可以让您访问相同的属性和字段值。并且始终支持反射。
如果一个类没有被标记[Serializable]
,你可以尝试使用SerializationSurrogate进行序列化
您可以以不同的方式看待您的问题,使用 [Serializable] 允许您使用 dotnet 库序列化为 json、xml 等。您仍然可以通过编写自己的方法来序列化,因为基本上任何数据结构都可以表示为xml 或 json 格式。
将 [Serializable] 添加到类是 Bill Wagner 的精彩著作《Effective C#: 50 specific ways to increase your C# 》中的最佳实践技巧之一。
正如@Darin (+1) 指出的那样,您可以序列化一个类而不是 [Serializable] 指出您不能回顾性地重新装饰一个类。如果我是你,我会输入 [Serializable],因为解决这个问题不值得付出努力。