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

この例外を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 に答える
0

リストを返す代わりに、シリアル化可能とマークされた新しいクラスを作成して送信する必要があります。

[Serializable]
class MyList : List<int>
{
}
于 2010-01-29T16:52:25.717 に答える
-1

XMLIgnoreシリアル化したくない場合は、属性を使用してdoItメソッドをマークします。

于 2010-01-29T15:14:45.980 に答える