问题描述:
使用反射方法创建了一个控件,并将控件加到了页面中去,控件通过某些事件使用了序列化与反序列化的功能。
二进制序列化,XML序化都试了,都出现了错误:不能将类 “A”强制转换为类型“A”。
具体的代码很多,下面我写了一个简化版的,可以重现问题,等待高人帮忙解决,万分感激!1.控件代码,这个类需要编译到:UBOXCONTROLS.DLL中。
namespace Admiral.UBox.Controls
{
[Serializable()]
public class TestSerObject
{
public string data;
}
public class TestSer : TextBox
{
protected override void OnLoad(EventArgs e)
{
TestSerObject tso = new TestSerObject();
tso.data = "test"; byte[] d = Serialize(tso);
TestSerObject tso2 = Deserialize(d); base.OnLoad(e);
} public byte[] Serialize(TestSerObject tso)
{
MemoryStream ms = new MemoryStream();
//BinaryFormatter formatter = new BinaryFormatter();
XmlSerializer formatter = new XmlSerializer(tso.GetType()); formatter.Serialize(ms, tso);
ms.Flush();
byte[] _data = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Read(_data, 0, (int)ms.Length);
ms.Close();
return _data;
} public TestSerObject Deserialize(byte[] data)
{
MemoryStream ms = new MemoryStream(data);
//BinaryFormatter formatter = new BinaryFormatter();
XmlSerializer formatter = new XmlSerializer(typeof(TestSerObject));
object dso = formatter.Deserialize(ms);
TestSerObject exp = (TestSerObject)dso;
ms.Close();
return exp;
}
}
}
2页面代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Diagnostics;using System.IO;
using System.Reflection;
public partial class TestGrid : System.Web.UI.Page
{
private static Assembly _assembly;
static internal Assembly Assembly
{
get
{
if (_assembly == null)
{
string np ="d:/ubox/uboxui/bin/UBoxControls.DLL";
_assembly = Assembly.LoadFile(np);
}
return _assembly;
}
} protected override void OnInit(EventArgs e)
{
object o = Assembly.CreateInstance("Admiral.UBox.Controls.TestSer");
Control lv = o as Control;
this.form1.Controls.Add(lv);
base.OnInit(e);
}
}
使用反射方法创建了一个控件,并将控件加到了页面中去,控件通过某些事件使用了序列化与反序列化的功能。
二进制序列化,XML序化都试了,都出现了错误:不能将类 “A”强制转换为类型“A”。
具体的代码很多,下面我写了一个简化版的,可以重现问题,等待高人帮忙解决,万分感激!1.控件代码,这个类需要编译到:UBOXCONTROLS.DLL中。
namespace Admiral.UBox.Controls
{
[Serializable()]
public class TestSerObject
{
public string data;
}
public class TestSer : TextBox
{
protected override void OnLoad(EventArgs e)
{
TestSerObject tso = new TestSerObject();
tso.data = "test"; byte[] d = Serialize(tso);
TestSerObject tso2 = Deserialize(d); base.OnLoad(e);
} public byte[] Serialize(TestSerObject tso)
{
MemoryStream ms = new MemoryStream();
//BinaryFormatter formatter = new BinaryFormatter();
XmlSerializer formatter = new XmlSerializer(tso.GetType()); formatter.Serialize(ms, tso);
ms.Flush();
byte[] _data = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Read(_data, 0, (int)ms.Length);
ms.Close();
return _data;
} public TestSerObject Deserialize(byte[] data)
{
MemoryStream ms = new MemoryStream(data);
//BinaryFormatter formatter = new BinaryFormatter();
XmlSerializer formatter = new XmlSerializer(typeof(TestSerObject));
object dso = formatter.Deserialize(ms);
TestSerObject exp = (TestSerObject)dso;
ms.Close();
return exp;
}
}
}
2页面代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Diagnostics;using System.IO;
using System.Reflection;
public partial class TestGrid : System.Web.UI.Page
{
private static Assembly _assembly;
static internal Assembly Assembly
{
get
{
if (_assembly == null)
{
string np ="d:/ubox/uboxui/bin/UBoxControls.DLL";
_assembly = Assembly.LoadFile(np);
}
return _assembly;
}
} protected override void OnInit(EventArgs e)
{
object o = Assembly.CreateInstance("Admiral.UBox.Controls.TestSer");
Control lv = o as Control;
this.form1.Controls.Add(lv);
base.OnInit(e);
}
}
以前在bin目录不好用,我就给拿出来了^_^
看看
object o = Assembly.CreateInstance("Admiral.UBox.Controls.TestSer"); 是否创建成功