2009-03-23 21 views
21

Aşağıdaki örnek verildi:Kurucu, seri hale getirme sırasında bulunamadı?

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); 
     } 
    } 
} 

Son satırda, biçimlendirici yapıcıyı Foo'ya bulamadığı için bir SerializationException atılır. Neden?

cevap

49

sınıf Foo

public Foo() { 

} 

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

} 

sınıf alakalı seri parametreleri içeren bir yapıcı ihtiyacı aşağıdaki kod satırlarını ekleyin.

+5

Ve bunun nedeni, Dictionary ISerializable'ı uyguladığı için, elbette ... –

+0

SerializationInfo ve StreamingContext sınıfları için not, ** System.Runtime.Serialization ** ad alanı. Tam yol ** System.Runtime.Serialization.SerializationInfo ** 'dir. – Wappenull

İlgili konular