序列化和反序列化时出现InvalidCastException

Cra*_*rer 13 c# serialization

我有这个代码:

public byte[] SerializeToBlob()
{
    using (var buffer = new MemoryStream())
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(buffer, this);
        buffer.Position = 0;
        return buffer.ToArray();
    }
}

public static ActionData DeserializeFromBlob(byte[] state)
{
    using (var buffer = new MemoryStream(state))
    {
        var formatter = new BinaryFormatter();
        var result = formatter.Deserialize(buffer);
        return (ActionData) result;
    }
}
Run Code Online (Sandbox Code Playgroud)

我打电话给它如下:

byte[] actionDataBlob = ad.SerializeToBlob();
var ad1 = ActionData.DeserializeFromBlob(actionDataBlob);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将反序列化对象强制转换为其类型时,我得到一个InvalidCastException:

[A] ActionData无法强制转换为[B] ActionData.类型A源自位于'C:\ Users\Craig\AppData\Local\Temp\Temporary ASP'的上下文'Default'中的'XXXX.XXXX.Auditing,Version = 1.0.76.0,Culture = neutral,PublicKeyToken = null'. NET Files\root\5d978e5b\ffc57fe1\assembly\dl3\2b1e5f8f\102c846e_9506ca01\XXXX.XXXX.Auditing.DLL'.类型B源自位于'F:\ Visual Studio Projects\XXXXXXXXX\source\XXXX.XXXX.SilverlightClient的上下文'LoadNeither'中的'XXXX.XXXX.Auditing,Version = 1.0.76.0,Culture = neutral,PublicKeyToken = null'名.web\BIN\XXXX.XXXX.Auditing.dll".

(XXXX.XXXX会隐藏客户的名字)

是什么赋予了?

我现在在这里问了一个相关的问题:

我应该如何序列化一些简单的审计数据以存储在SQL表中?

Ant*_*hyy 4

您已在不同的加载器上下文中加载相同的程序集两次。例如,您碰巧首先加载了 XXX.Auditing Assembly.LoadFrom(),然后其他(或您的)程序集正常加载了它。事实上,二进制反序列化器可能是第二次加载程序集的人,尽管我不知道为什么(没有 ASP.NET 经验)。