Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net BSON序列化对象可以';结构更改后不能反序列化_.net_Serialization_Json.net_Bson - Fatal编程技术网

.net 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。经过一些重

在我当前的项目(一个web应用程序)中,用户处理大型对象,这些对象在不使用时被序列化为BSON并存储在数据库中。最近,我对该对象的类进行了结构更改,这导致反序列化失败,引发以下异常:

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(流))
{
返回序列化程序。反序列化(读取器);
}
}