我有这个代码:
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会隐藏客户的名字)
是什么赋予了?
我现在在这里问了一个相关的问题:
您已在不同的加载器上下文中加载相同的程序集两次。例如,您碰巧首先加载了 XXX.Auditing Assembly.LoadFrom(),然后其他(或您的)程序集正常加载了它。事实上,二进制反序列化器可能是第二次加载程序集的人,尽管我不知道为什么(没有 ASP.NET 经验)。