在我目前的项目(Web应用程序)中,用户处理大型对象,这些对象序列化为BSON并在未处于活动状态时存储在数据库中。最近,我对这个对象的类进行了结构更改,这导致反序列化失败,抛出以下异常:
Newtonsoft.Json.JsonSerializationException: Could not find type "....ResultSliceDouble" in assembly...
以前,该类包含两个类的多个实例,ResultSliceInt
和ResultSliceDouble
。在进行了一些重构之后,我将ResultSliceDouble
重命名为ResultSlice
,删除了ResultSliceInt
类,并将其所有实例转换为使用ResultSlice
。
可以预见,如果我将ResultSlice
重命名为ResultSliceDouble
,我会得到相同的例外,但这次约为ResultSliceInt
。
有没有办法可以安全地将类的旧实例转换为新的?完全无效现有实例是不可接受的,因为Web应用程序当前正被多个用户使用。
作为参考,这里是反序列化代码:
public static LargeObject DeserializeLargeObject(byte[] objectData)
{
var serializer = new JsonSerializer
{
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
TypeNameHandling = TypeNameHandling.All
};
var stream = new MemoryStream(objectData) { Position = 0 };
using (var reader = new BsonReader(stream))
{
return serializer.Deserialize<LargeObject>(reader);
}
}