【发布时间】:2009-10-24 17:06:45
【问题描述】:
This question 可能与我的非常相似,但我看不到我需要的答案。我有一个名为CASM 的类,它有一个List<Action>。我想序列化这个类(使用BinaryFormatter 或类似的东西)。这个类和Actions 中引用的所有类都有正确的[Serializable] 和[NonSerializable] 属性。
尝试序列化时出现问题 - 它给出了这个错误:
Type 'CASM.CASM+<>c__DisplayClass2c' in Assembly 'CASM, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null' is not marked as serializable.
这个<>c__DisplayClass2c 是一个自动生成的内部类,它包含我在我的应用程序中使用的不同类型的匿名委托。但是,从下图中我们可以看出,它不是[Serializable]:
alt text http://bayimg.com/image/maebbaacj.jpg
更改我的应用程序以使其有效的最佳方法是什么?制作我自己的<>c__DisplayClass2c-type 类并使其可序列化?还是有更好的办法?
编辑: 最后,我只是创建了自己的课程,而不是自动生成的课程。我也帮助调试,实际上有一个描述性的名称,而不仅仅是b__12()。
【问题讨论】:
-
你说这个类是自动生成的——它是怎么做的?控制它吗?它是由第 3 方组件生成的吗?
-
它由编译器自动生成 - 它具有 [CompilerGenerated] 属性。我认为它只是一个存储许多非常相似的匿名代表的类/位置(在这种情况下,它们都是无效的,并且接受 string[] 作为参数)。
-
然后,尝试生成自己的类。你可能也有匿名方法的问题(我没试过,所以我不知道),在这种情况下,尝试非匿名版本。如果这不起作用,您可以尝试先将方法转换为表达式(那些 应该 是可序列化的)
-
编译表达式树遇到与您仍然需要制作自动生成类的操作完全相同的问题。
标签: c# .net serialization anonymous-methods anonymous-class