如何在DesignTime中使用.NET XMLSerializer反序列化

如何在DesignTime中使用.NET XMLSerializer反序列化,.net,xml-serialization,design-time,.net,Xml Serialization,Design Time,我的项目中有一些配置文件,可以在运行时使用带有listbox和propertygrid的usercontrol进行更改。使用这种方法,每次手动将配置文件从\bin\debug\文件夹复制到项目文件夹中时,我都必须将它们复制到项目文件夹中 现在我想在设计时更改这些文件的内容。所以我开始写我自己的设计师。第一次打开设计器时,一切正常,但当项目重新生成时,它就不再工作了。当反序列化对象被强制转换时,会发生InvalidCastException,这似乎是在类型相等但不在同一程序集中描述的问题 这是一个

我的项目中有一些配置文件,可以在运行时使用带有listbox和propertygrid的usercontrol进行更改。使用这种方法,每次手动将配置文件从\bin\debug\文件夹复制到项目文件夹中时,我都必须将它们复制到项目文件夹中

现在我想在设计时更改这些文件的内容。所以我开始写我自己的设计师。第一次打开设计器时,一切正常,但当项目重新生成时,它就不再工作了。当反序列化对象被强制转换时,会发生InvalidCastException,这似乎是在类型相等但不在同一程序集中描述的问题

这是一个示例,在将UserControl1添加到表单时会出现相同的问题:

public class SerializerTest
{
    public String Name { get; set; }
}

[Designer(typeof(MyDesigner))]
public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }

    public String Content 
    {
        get { return this.textBox1.Text; }
        set { textBox1.Text = value; }
    }
}

class MyDesigner : ControlDesigner
{ 
    public override void Initialize(IComponent component)
    {
        base.Initialize(component);
        try
        {
            string fName = @"D:\XMLSerializerTest\WindowsFormsApplication1\WindowsFormsApplication1\test.xml";
            XmlSerializer xmlSer = new XmlSerializer(typeof(SerializerTest));
            FileStream fs = new FileStream(fName, FileMode.Open);
            SerializerTest test = (SerializerTest)xmlSer.Deserialize(fs);
            ((UserControl1)this.Control).Content = (test != null) ? test.ToString() + " \n" + test.Name : "NULL";
        }
        catch (Exception ex) { ((UserControl1)this.Control).Content = ex.Message; }
    }
}
在重建之后,序列化程序似乎仍然被缓存和使用。所以我已经尝试了一个更复杂的构造函数,不应该使用缓存,但是行为没有改变


有人知道如何避免残疾例外吗

尝试预生成XML序列化程序集:

我很好奇。你希望从中得到什么?您在设计时拥有大量数据;您可以编译和部署。这些数据到哪里去了?如果它在某个xml文件中,就会丢失。在哪一点上;在设计阶段你在做什么?