.net BSON序列化对象可以';结构更改后不能反序列化
在我当前的项目(一个web应用程序)中,用户处理大型对象,这些对象在不使用时被序列化为BSON并存储在数据库中。最近,我对该对象的类进行了结构更改,这导致反序列化失败,引发以下异常:.net BSON序列化对象可以';结构更改后不能反序列化,.net,serialization,json.net,bson,.net,Serialization,Json.net,Bson,在我当前的项目(一个web应用程序)中,用户处理大型对象,这些对象在不使用时被序列化为BSON并存储在数据库中。最近,我对该对象的类进行了结构更改,这导致反序列化失败,引发以下异常: Newtonsoft.Json.JsonSerializationException: Could not find type "....ResultSliceDouble" in assembly... 以前,该类包含两个类的多个实例,ResultSliceInt和ResultSliceDouble。经过一些重
Newtonsoft.Json.JsonSerializationException: Could not find type "....ResultSliceDouble" in assembly...
以前,该类包含两个类的多个实例,ResultSliceInt
和ResultSliceDouble
。经过一些重构,我将ResultSliceDouble
重命名为ResultSlice
,删除了resultslicent
类,并将其所有实例转换为使用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);
}
}
publicstaticlargeobject反序列化目标对象(byte[]objectData)
{
var serializer=newjsonserializer
{
ConstructorHandling=ConstructorHandling.AllowNonPublicDefaultConstructor,
TypeNameHandling=TypeNameHandling.All
};
var stream=newmemoryStream(objectData){Position=0};
使用(var reader=newbsonreader(流))
{
返回序列化程序。反序列化(读取器);
}
}