如何使.net中没有Seri​​alizable属性的类可序列化

时间:2010-03-17 10:29:05

标签: .net json xml serializable

我有一个调试器可视化工具,用于以数据表的形式查看类对象列表。但代码的限制是该类应该是可序列化的,即应标记为[Serializable],如果该类未标记为Serializable,则调试器崩溃。那么,任何人都可以告诉我如何在运行时创建一个Serializable类,如果该类没有标记为Serializable。

5 个答案:

答案 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]因为解决这个问题是不值得的。