问题描述:
使用反射方法创建了一个控件,并将控件加到了页面中去,控件通过某些事件使用了序列化与反序列化的功能。
二进制序列化,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);
    }
}