我有这个代码用于序列化我自定义的UserData对象集合。但是,current
属性仅表示集合中当前使用的项目,因此它仅序列化该对象。
我想在我的集合中序列化所有对象,我将如何在我的集合的GetObjectData
实现中进行此操作?
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
// Add the userdata object to SerializationInfo object
info.AddValue("UserData", current);
}
这是我的反序列化构造函数,我不确定这会反序列化集合中的每个对象。
public UserDataCollection(SerializationInfo serializationInfo, StreamingContext ctxt)
{
UserData data = (UserData)serializationInfo.GetValue("UserData", typeof(UserData));
// Add to objects existing collection
this.Add(data);
}
答案 0 :(得分:1)
你是如何在幕后举办物品的?你在某个地方有List<T>
字段吗?只需序列化/反序列化,让它担心它。说实话,如果您将自定义集合包装器标记为[Serializable]
并将任何不必要的字段(例如current
)标记为[NonSerialized]
,则应该发生(即无需实施ISerializable
)。
请注意,在大多数情况下,我倾向于建议反对 BinaryFormatter
;发送短期(瞬态)消息是可以的,但我不建议将其用于存储目的(在文件或数据库中);您可以在以后尝试反序列化时遇到很多版本问题。