【发布时间】:2010-12-02 20:37:11
【问题描述】:
我有一个带有子类的自定义抽象基类,我使用 ISerializable 将其序列化/反序列化。当我对此类的子类的单个实例进行序列化/反序列化时,一切正常。然而,当我做一个数组时,我总是在反序列化时得到一个空数组。序列化是使用 BinaryFormatter 完成的。
项目包含在一个:
public ObservableCollection<Trade> Trades { get; private set; }
在序列化时,这是在 SerializationInfo 参数的 GetObjectData 中完成的:
Trade[] trades = (Trade[])Trades.ToArray<Trade>();
info.AddValue("trades", trades);
在反序列化时,这在序列化构造函数中也在 SerializationInfo 参数上完成:
Trade[] trades = (Trade[])info.GetValue("trades", typeof(Trade[]));
foreach (Trade t in trades)
{
Trades.Add(t);
}
反序列化总是给我一个空数组,正如我之前提到的,使用这段代码可以很好地序列化和反序列化单个项目:
序列化(GetObjectData 方法):
info.AddValue("trade", Trades.First<Trade>());
反序列化(序列化构造函数):
Trade t = (Trade)info.GetValue("trade", typeof(Trade));
Trades.Add(t);
这是一个常见问题吗?至少我似乎没有发现任何其他人遇到它。希望有一个解决方案 :) 如果我需要为您提供更多信息/代码,请告诉我。
谢谢!
【问题讨论】:
-
嗨,什么是信息变量?序列化的格式是什么? xml还是二进制?
-
这是我在 GetObjectData 和 Serialization-constructor 中使用的 SerializationInfo,抱歉应该提到。
-
Trade[] trades = (Trade[])Trades.ToArray
(); 的行是什么?你为什么不直接说 var trades = Trades.ToArray(); (Linq 扩展) -
政策:我正在做二进制序列化,所以我不认为我有这样的标签可用。
标签: c# arrays deserialization iserializable