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