在具有匿名方法的类上使用XmlSerializer

时间:2010-01-29 15:12:12

标签: c# xml-serialization anonymous-function

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

如何序列化此类?感谢。

3 个答案:

答案 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方法。