BSON序列化对象在结构更改后无法反序列化

时间:2015-01-15 17:44:43

标签: .net serialization json.net bson

在我目前的项目(Web应用程序)中,用户处理大型对象,这些对象序列化为BSON并在未处于活动状态时存储在数据库中。最近,我对这个对象的类进行了结构更改,这导致反序列化失败,抛出以下异常:

Newtonsoft.Json.JsonSerializationException: Could not find type "....ResultSliceDouble" in assembly...

以前,该类包含两个类的多个实例,ResultSliceIntResultSliceDouble。在进行了一些重构之后,我将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);
        }
    }

0 个答案:

没有答案