2009-03-23 13 views
21

次の例を示します。デシリアライズ時にコンストラクタが見つかりませんでしたか?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.Serialization.Formatters.Binary; 
using System.IO; 

namespace SerializationTest 
{ 
    [Serializable] 
    class Foo : Dictionary<int, string> 
    { 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Foo foo = new Foo(); 
      foo[1] = "Left"; 
      foo[2] = "Right"; 

      BinaryFormatter formatter = new BinaryFormatter(); 
      MemoryStream stream = new MemoryStream(); 

      formatter.Serialize(stream, foo); 
      stream.Seek(0, SeekOrigin.Begin); 
      formatter.Deserialize(stream); 
     } 
    } 
} 

フォーマッタがFooのコンストラクタを見つけることができないため、最後の行でSerializationExceptionがスローされます。何故ですか?

答えて

49

クラスFooの

public Foo() { 

} 

public Foo(SerializationInfo info, StreamingContext context) : base(info, context) { 

} 

クラスは、関連する直列化パラメータを持つコンストラクタが必要で、次のコード行を追加します。

+5

辞書はISerializableを実装しているため、もちろんです。 –

+0

SerializationInfoクラスとStreamingContextクラスについては、 ** System.Runtime.Serialization **名前空間にあります。 フルパスは** System.Runtime.Serialization.SerializationInfo **です。 – Wappenull

関連する問題