C# 序列化对象集合中的每个对象

C# 序列化对象集合中的每个对象,c#,serialization,collections,C#,Serialization,Collections,我有这段代码用于序列化自定义的UserData对象集合。但是,current属性仅表示集合中当前使用的项,因此它仅序列化该对象 我希望在我的集合中序列化所有对象,在我的集合的GetObjectData实现中如何实现这一点 public void GetObjectData(SerializationInfo info, StreamingContext ctxt) { // Add the userdata object to Serial

我有这段代码用于序列化自定义的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);
        }

你是如何把你的物品藏在幕后的?您是否有
列表
字段?只要序列化/反序列化它,让它去担心它。老实说,如果您将自定义集合包装器标记为
[Serializable]
,并将任何不必要的字段(例如
current
)标记为
[NonSerialized]
(即不必实现
ISerializable


注意,在大多数情况下,我倾向于建议不要使用
BinaryFormatter
;发送短期(暂时)消息是可以的,但我不建议将其用于存储目的(在文件或数据库中);您可能会在以后尝试反序列化时遇到许多版本控制问题。

您是如何在后台保存对象的?您是否有
列表
字段?只要序列化/反序列化它,让它去担心它。老实说,如果您将自定义集合包装器标记为
[Serializable]
,并将任何不必要的字段(例如
current
)标记为
[NonSerialized]
(即不必实现
ISerializable


注意,在大多数情况下,我倾向于建议不要使用
BinaryFormatter
;发送短期(暂时)消息是可以的,但我不建议将其用于存储目的(在文件或数据库中);您可以在以后尝试反序列化时遇到许多版本控制问题。

谢谢Mark!我想知道,你会推荐什么样的序列化?XML?这取决于您需要什么。XmlSerializer/DataContractSerializer是xml的ood;json.net是另一个基于文本的选项。对于二进制文件,我推荐protobuf net,但我有点。。。(但它是免费的…)谢谢马克!我想知道,你会推荐什么样的序列化?XML?这取决于您需要什么。XmlSerializer/DataContractSerializer是xml的ood;json.net是另一个基于文本的选项。对于二进制文件,我推荐protobuf net,但我有点。。。(但它是免费的…)