0

我想序列化一个在其实现中使用匿名函数的类。编译器正在生成一个内部类来实现匿名函数。序列化程序失败并出现错误:“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);

我如何序列化这个类?谢谢。

4

3 回答 3

0

您应该创建一个标记为可序列化的新类并将其发送,而不是返回一个列表。

[Serializable]
class MyList : List<int>
{
}
于 2010-01-29T16:52:25.717 回答
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());        
    }
}
于 2010-01-29T16:23:02.987 回答
-1

XMLIgnore如果您不希望将其序列化,请使用属性标记 doIt 方法。

于 2010-01-29T15:14:45.980 回答