【发布时间】:2013-09-23 10:46:16
【问题描述】:
假设我有
List<object> mainList = new List<object>();
它包含
List<string> stringList = new List<string();
List<CustomClass> custList = new List<CustomClass>();
mainList.Add(stringList);
mainList.Add(custList);
序列化
Stream stream;
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, mainList);
反序列化
Stream stream = (Stream)o;
BinaryFormatter formatter = new BinaryFormatter();
List<object> retrievedList = (List<object>)formatter.Deserialize(stream);
此时,我收到一个错误,即读取的流(反序列化)在没有检索到值的情况下到达了流的末尾。
除此之外我还需要指定什么吗?
[Serializable]
public class CustomClass { .... }
在自定义类中使这项工作?我不能每次都反序列化包含不同类型对象的 List> 吗?
我试过了
IList list = (IList)Activator.CreateInstance(typeof(custClassList[0]))
并尝试发送和接收这个,但遇到了同样的问题。
我可以序列化和反序列化指定类型或列表,但我确实需要它是动态的。
【问题讨论】:
-
没有
Serializable属性或实现ISerializable接口你不能用BinaryFormatter序列化一个类型 -
这一行只是一个错字吗?
List<object> retrievedList = formatter.Serialize(stream);还是来自您的代码? ;) -
List<object> retrievedList = formatter.Serialize(stream);应该是List<object> retrievedList = (List<object>)formatter.Deserialize(stream);以便编译。我认为这是一个错字。改正 -
Sriram Sakthivel 建议的内容 ;) 但如果您在问题中发布它,您的代码甚至无法编译,所以我认为您的意思是
Deserialize无论如何(当然还有演员表) -
你还在打电话给
Serialize...
标签: c# serialization stream deserialization binaryformatter