gpt4 book ai didi

c# - 序列化包含其他 ISerializable 对象的 ISerializable 对象

转载 作者:太空狗 更新时间:2023-10-29 23:42:01 24 4
gpt4 key购买 nike

我目前正在努力保存更大的对象结构,其中包含我正在处理的应用程序中的“项目”所需的所有数据。数据是诸如图片、流文档以及更基本的数据类型之类的东西。

现在,我目前的方法是在我需要保存的对象中包含的所有类上实现 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 方法?或者,也许这个接口(interface)甚至不打算处理这些类型的类。

所以,如果有人愿意,请稍微看一下,并在涉及到诸如此类的序列化时为我指明正确的方向。

谢谢!

最佳答案

不确定这里的问题到底是什么(如果您可以发布 Trade 类和具体不起作用的详细信息,那将会很有帮助),但一般来说,如果 Trade 类是可序列化的,您应该能够只添加Profile 类的 [Serializable] 属性,不需要通过实现 ISerializable 进行自定义序列化。

通常您只需要在需要进行自定义序列化时(例如,当您的数据成员不可序列化时)实现 ISerializable。

编辑: 刚刚意识到您正在使用 ObservableCollection,所以我之前关于仅使用 [Serializable] 属性的评论是不正确的。有关序列化 ObservableCollection 的信息,请参见此处:http://kentb.blogspot.com/2007/11/serializing-observablecollection.html或者您也应该能够使用 ObservableCollection.CopyTo() 获取 Trade[] 实例并将其直接添加到 SerializationInfo。

关于c# - 序列化包含其他 ISerializable 对象的 ISerializable 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com