Элементы управления имеют десятки свойств.При создании элемента управления вы устанавливаете только некоторые свойства, а остальные остаются по умолчанию.Вам нужно сохранить только указанные свойства.
Создать класс для хранения требуемых свойств:
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);
Как сделать десериализацию, думаю, догадаешься.