簡體   English   中英

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

[英]Using XmlSerializer on a class with anonymous methods

我想序列化在其實現中使用匿名函數的類。 編譯器正在生成一個內部類以實現匿名功能。 序列化器失敗,並顯示以下錯誤:“由於其保護級別,無法訪問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);

我如何序列化此類? 謝謝。

我無法在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());        
    }
}

而不是返回列表,您應該創建一個標記為可序列化的新類並將其發送。

[Serializable]
class MyList : List<int>
{
}

如果您不希望序列化下來,請使用XMLIgnore屬性標記doIt方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM