我正在尝试序列化自定义集合UserDataCollection,它由UserData对象组成。我想知道在实现序列化时,实际对象(UserData)是否也需要具有[Serializable]属性并从ISerializable接口继承?
我想序列化集合中的每个对象(UserData),它的所有属性和变量。
我现在有这个:
public class UserData : IEquatable<UserData>, IUser
{
/// some properties methods
}
[Serializable()]
class UserDataCollection : IEnumerable<UserData>, ISerializable
{
static List<UserData> Collection = new List<UserData>();
IUser current;
#region Properties
public UserData Current
{
get
{
return (UserData)current;
}
set
{
current = value;
}
}
#endregion
#region Constructors
public UserDataCollection( IUser userdata )
{
this.current = userdata;
}
/// <summary>
/// Deserialization Constructor
/// </summary>
/// <param name="SerializationInfo">This object holds a name-value pair for the properties to be serialized</param>
/// <param name="item"></param>
public UserDataCollection(SerializationInfo serializationInfo, StreamingContext ctxt)
{
Current = (UserData)serializationInfo.GetValue("UserData", typeof(UserData)); <-- Can I just do this on the UserData object property or does it itself also need to implement ISerializable?
}
#endregion
//more methods here...
}
该集合将使用二进制序列化进行序列化。
答案 0 :(得分:2)
是的,您的UserData类应标记为Serializable。它不必显式继承ISerializable,但如果你想自定义序列化,那么你当然可以。
应用SerializableAttribute 属性为指示该类型的类型 这种类型的实例可以 序列化。共同语言 运行时抛出SerializationException 如果对象图中有任何类型 被序列化没有 SerializableAttribute属性 应用