如果我有一个包含许多字段的类,并且使用二进制序列化对其进行了序列化。
然后我提取一个基类,并将某些字段从该类移到基类中。例如
class Class
{
int field1;
string field2;
}
已更改为
class Class : BaseClass
{
int field1;
}
class BaseClass
{
string field2;
}
这是否有可能以任何方式破坏序列化-即始终可以将旧版本的Class反序列化为Class的新版本,反之亦然。
我进行的实验表明这很好,但是如果有人知道在任何情况下都不可行,那么在将其投入生产代码之前,那显然是很棒的。
答案 0 :(得分:1)
编辑: 反序列化时出现问题:成员“ field1”将无法正确反序列化。
1)序列化人员:
var person = new Employee()
{
Name = "Mark Zuckerberg",
Salary = 1000
};
var bf = new BinaryFormatter();
bf.Serialize(new FileStream("C:\\TEMP\\test.dat", FileMode.Create), person);
[Serializable]
public class Employee
{
public string Name { get; set; }
public decimal Salary { get; set; }
}
2)更改了类结构
[Serializable]
public abstract class Person
{
public string Name { get; set; }
}
[Serializable]
public class Employee : Person
{
public decimal Salary { get; set; }
}
原始答案:
假设您使用的是BinaryFormatter,this文章,但没有提及任何内容,因此我猜测就可以了(编辑:不好了)。
以下是一些通常可以遵循的最佳做法(也摘自上述文章):
为确保类型与将来的序列化引擎兼容,请遵循以下准则: