我目前正致力于保存更大的对象结构,这些对象结构包含了我正在处理的应用程序中的“项目”所需的所有数据。数据包括图片、流文档以及更基本的数据类型。
现在,我目前的方法是在需要保存的对象中包含的所有类上实现ISerializable。但是,在以下情况下:
public class Profile : ISerializable
{
public ObservableCollection<Trade> Trades { get; set; }
public Profile() {}
public Profile(SerializationInfo info, StreamingContext context)
: this()
{
foreach (SerializationEntry entry in info)
{
if (entry.Name.StartsWith("trade"))
{
Type t = entry.ObjectType;
Trades.Add(entry.Value as Trade);
}
}
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
int i = 0;
foreach (Trade t in Trades)
{
info.AddValue("trade" + i, t, t.GetType());
i++;
}
}
}这带来了一个问题。填充我的列表的交易类也实现了ISerializable。所以我想知道的是:这是一个好方法吗?它还能工作吗?到目前为止,我写的代码不能工作,我仍然在努力解决问题。
更具体地说,info.AddValue("trade“+ i,t,t.GetType());会使用交易类的ISerializable-methods吗?或者这个接口甚至不是用来处理这些类型的类的。
因此,如果有人愿意,请稍微看一看,当涉及到这些东西的序列化时,也许可以给我指明正确的方向。
谢谢!
发布于 2010-11-29 06:22:50
我不确定这里的问题到底是什么(如果您可以发布Trade类并详细说明什么是不起作用的,这将是很有帮助的),但一般来说,如果Trade类是可序列化的,您应该能够只将serializable属性添加到Profile类中,而不需要通过实现ISerializable来执行自定义序列化。
通常,您只需要在需要进行自定义序列化时(例如,当您的数据成员不可序列化时)实现ISerializable。
编辑:刚刚意识到您正在使用ObservableCollection,所以我之前关于只使用可序列化属性的评论是不正确的。有关序列化ObservableCollection:http://kentb.blogspot.com/2007/11/serializing-observablecollection.html的信息,请参阅此处,或者您也可以使用ObservableCollection.CopyTo()来获取Trade[]实例并将其直接添加到SerializationInfo中。
https://stackoverflow.com/questions/4299380
复制相似问题