要解决“BinaryFormatter 不会覆盖/更新序列化的项”的问题,可以使用以下方法:
// 反序列化原始对象
using (FileStream fs = new FileStream("data.bin", FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
OriginalObject originalObject = (OriginalObject)bf.Deserialize(fs);
// 使用反序列化后的对象更新原始对象的属性
originalObject.Property1 = updatedValue1;
originalObject.Property2 = updatedValue2;
// 将原始对象重新序列化保存
using (FileStream fs2 = new FileStream("data.bin", FileMode.Create))
{
bf.Serialize(fs2, originalObject);
}
}
// 反序列化原始对象
using (FileStream fs = new FileStream("data.bin", FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
OriginalObject originalObject = (OriginalObject)bf.Deserialize(fs);
// 创建临时对象
OriginalObject tempObject = new OriginalObject();
// 使用临时对象更新原始对象的属性
tempObject.Property1 = updatedValue1;
tempObject.Property2 = updatedValue2;
// 将临时对象的属性复制到原始对象
originalObject.Property1 = tempObject.Property1;
originalObject.Property2 = tempObject.Property2;
// 将原始对象重新序列化保存
using (FileStream fs2 = new FileStream("data.bin", FileMode.Create))
{
bf.Serialize(fs2, originalObject);
}
}
这些方法可以让您在不更改原始对象的类型或添加新的序列化属性的情况下更新已序列化的对象。