如何序列化在C#中的XMLSerializer的控制

问题描述 投票:-1回答:1

我正在开发一个应用程序,让用户可以与所有添加的控件添加一些控件(按钮,标签和...)动态地面板,然后保存表单。为了节省我使用XMLSerializer的,但它给我这个错误

无法序列类型System.ComponentModel.ISite成员System.ComponentModel.Component.Site,因为它是一个接口。

我想知道我怎么能保存控件的XML文件?如果这是不可能的,是有任何其他方式做到这一点?

编辑:(解决)

我发现这正是我在寻找一个好项目:

Easy Form Design at Run Time C# Windows Forms

谢谢

c# xml-serialization xmlserializer
1个回答
0
投票

控制有几十个属性。当你创建一个控制,只是设置一些属性,其余保持默认。你只需要保存指定的属性。

创建一个类来存储所需的性能:

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);

如何使反序列化,我想,你会猜。

© www.soinside.com 2019 - 2024. All rights reserved.