首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >序列化包含其他ISerializable对象的ISerializable对象

序列化包含其他ISerializable对象的ISerializable对象
EN

Stack Overflow用户
提问于 2010-11-29 06:04:34
回答 1查看 2.8K关注 0票数 5

我目前正致力于保存更大的对象结构,这些对象结构包含了我正在处理的应用程序中的“项目”所需的所有数据。数据包括图片、流文档以及更基本的数据类型。

现在,我目前的方法是在需要保存的对象中包含的所有类上实现ISerializable。但是,在以下情况下:

代码语言:javascript
复制
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吗?或者这个接口甚至不是用来处理这些类型的类的。

因此,如果有人愿意,请稍微看一看,当涉及到这些东西的序列化时,也许可以给我指明正确的方向。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4299380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档