我正在寻找一个实现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);
}
}
Run Code Online (Sandbox Code Playgroud)
从我到目前为止阅读的文档中,据我所知,这就是用类标记[Serializable]属性所会发生的事情,正如你可以看到类没有反序列化构造函数,这就是为什么我是看着它开始.从我所知道的,而不是需要将反序列化构造函数添加到类中,该类实际上不需要首先实现ISerializable接口.那是对的吗?
我有一个使用二进制序列化来保存数据的遗留应用程序.现在我们想使用Json.net 4.5来序列化数据,而不需要对现有类进行太多更改.
事情很顺利,直到我们打了一个循环的依赖类.有没有解决此问题的解决方法?
示例代码如下所示
[Serializable]
class Department : ISerializable
{
public Employee Manager { get; set; }
public string Name { get; set; }
public Department() { }
public Department( SerializationInfo info, StreamingContext context )
{
Manager = ( Employee )info.GetValue( "Manager", typeof( Employee ) );
Name = ( string )info.GetValue( "Name", typeof( string ) );
}
public void GetObjectData( SerializationInfo info, StreamingContext context )
{
info.AddValue( "Manager", Manager );
info.AddValue( "Name", Name );
}
}
[Serializable]
class Employee : …Run Code Online (Sandbox Code Playgroud)