【发布时间】:2012-01-19 20:59:45
【问题描述】:
我正在查看实现ISerializable 接口的解决方案中的类。它有一个GetObjectData 接口要求的序列化方法。这里没有发生任何自定义序列化,它只是用类的属性名称及其值填充SerializationInfo 对象。
[Serializable]
public class PersonName :ISerializable
{
[DataMember]
public string NamePrefix { get; set; }
[DataMember]
public string GivenName { get; set; }
[DataMember]
public string SurName { get; set; }
public PersonName(string givenName, string surName, string namePrefix)
{
GivenName = givenName;
SurName = surName;
NamePrefix = namePrefix;
}
public PersonName()
{
}
#region ISerializable Members
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("NamePrefix",NamePrefix);
info.AddValue("GivenName",GivenName);
info.AddValue("SurName",SurName);
}
}
据我所知,从我目前阅读的文档来看,这就是用[Serializable] 属性标记的类无论如何都会发生的情况,并且您可以看到该类没有反序列化构造函数,这就是为什么我要开始研究它的原因。据我所知,不需要将反序列化构造函数添加到类中,该类实际上不需要首先实现ISerializable 接口。对吗?
【问题讨论】:
-
对。判断的方法是不要在 GetObjectData() 方法中提出任何异常。或者换句话说,需要一些 else 而不仅仅是 info 参数来初始化对象。
标签: c# serialization