我正在开发一个应用程序,让用户可以与所有添加的控件添加一些控件(按钮,标签和...)动态地面板,然后保存表单。为了节省我使用XMLSerializer的,但它给我这个错误
无法序列类型System.ComponentModel.ISite成员System.ComponentModel.Component.Site,因为它是一个接口。
我想知道我怎么能保存控件的XML文件?如果这是不可能的,是有任何其他方式做到这一点?
编辑:(解决)
我发现这正是我在寻找一个好项目:
Easy Form Design at Run Time C# Windows Forms
谢谢
控制有几十个属性。当你创建一个控制,只是设置一些属性,其余保持默认。你只需要保存指定的属性。
创建一个类来存储所需的性能:
public class ControlValueObject
{
public string Type { get; set; }
public string Text { get; set; }
public int Top { get; set; }
public int Left { get; set; }
// Add the properties you need
}
然后创建这些对象的集合,序列化:
var label = new Label { Text = "Sample", Top = 10, Left = 20 };
var button = new Button { Text = "Click", Top = 40, Left = 20 };
panel.Controls.Add(label);
panel.Controls.Add(button);
var controls = panel.Controls.OfType<Control>()
.Select(c => new ControlValueObject { Type = c.GetType().Name, Text = c.Text, Left = c.Left, Top = c.Top })
.ToList();
var ser = new XmlSerializer(controls.GetType());
ser.Serialize(stream, controls);
如何使反序列化,我想,你会猜。