2011-11-21 90 views
1

可以说,我有一个类中有对象。从MemoryStream反序列化()

namespace Class_Serialization 
{ 
    [Serializable] 
    public class Data 
    { 
     public string Name = "Example1"; 
     public string place = "Torino"; 
     public DateTime time = DateTime.Now; 
    } 
} 

我试图用ISerialization接口

[Serializable] 
public class SerializeThisClass : ISerializable 
{ 
    public Data StreamThisData; 

    public SerializeThisClass() 
    { 

    } 

    public SerializeThisClass(Data _StreamThisData) 
    { 
     StreamThisData = _StreamThisData; 
    } 
    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] 
    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     info.AddValue("Object Data", StreamThisData); 
    } 
} 

我们序列化,当我用下面

Data DataToSerialize = new Data(); 
BinaryFormatter DataToBinary = new BinaryFormatter(); 
SerializeThisClass serialize = new SerializeThisClass(DataToSerialize); 
SerializeIn SerializeInMem = new SerializeIn(); 
DataToBinary.Serialize(SerializeInMem.StreamOfData, serialize); 
ListOfStreams.Add(SerializeInMem); 

它通常序列化的代码序列化,但是当我尝试反序列化,它给我错误

BinaryFormatter BinaryToData = new BinaryFormatter(); 
foreach (SerializeIn x in ListOfStreams) 
{ 
    x.StreamOfData.Position = 0; 
    SerializeThisClass DeserializeData = (SerializeThisClass)BinaryToData.Deserialize(x.StreamOfData); 
    MessageBox.Show("Name: " + DeserializeData.StreamThisData.Name + "\nPlace: " + DeserializeData.StreamThisData.place + "\nDateTime: " + DeserializeData.StreamThisData.time.ToString()); 
} 

Error: $exception{"The constructor to deserialize an object of type 'Class_Serialization.SerializeThisClass' was not found."} System.Exception {System.Runtime.Serialization.SerializationException}

+0

尝试做这种方式http://stackoverflow.com/questions/5017274/c-sharp-binaryformatter-and-deserialization-complex-objects –

+0

坦率地说,因为所有你正在做的是添加一个单一的元素,我会试图删除'ISerializable'并让'BinaryFormatter'自动处理它。 –

回答

4

如果要实现ISerializable,你需要签名的构造方法:

protected YourType(SerializationInfo information, StreamingContext context) {} 

它加载的数据(基本上,与GetObjectData相反)。据推测,随着(未经测试):

StreamThisData = (Data)info.GetValue("Object Data", typeof(Data)); 
+0

+1虽然我知道错过了什么,如果我能记住解释,该死!大声笑 –

+0

你能告诉我一个littel的例子,我不知道它... –

+0

@Jasim你的意思是,就像我的答案中显示的例子? –