我想序列化一个在其实现中使用匿名函数的类。编译器正在生成一个内部类来实现匿名函数。序列化程序失败并显示错误:“MyClass +<> c__DisplayClass2由于其保护级别而无法访问。只能处理公共类型。”
public class MyClass {
public doIt() {
int objective = 0;
return List<int> () { 1 }.Any(i => i == objective);
}
}
new XmlSerializer(typeof(MyClass)).Serialize(writer, myClass);
如何序列化此类?感谢。
答案 0 :(得分:0)
我无法使用C#3.0和.NET 3.5 SP1重现此异常 - 您使用的是哪个工具集?
请注意XmlSerializer
不会序列化方法;只有价值和属性。你偶然使用另一个序列化器吗?如果是这样,请将SerializableAttribute
放在类定义上,如下所示。
[Serializable]
public class MyClass{ ... }
以下是我用来尝试重现您的问题的代码,它在语义上是等效的。
public class MyClass
{
public bool doIt()
{
int objective = 0;
return new List<int>() { 1 }.Any(i => i == objective);
}
}
static class Program
{
static void Main(string[] args)
{
new XmlSerializer(typeof(MyClass)).Serialize(new MemoryStream(), new MyClass());
}
}
答案 1 :(得分:0)
您应该创建一个标记为可序列化的新类,而不是返回List。
[Serializable]
class MyList : List<int>
{
}
答案 2 :(得分:-1)
如果您不希望序列化,请使用XMLIgnore
属性标记doIt方法。