Как сериализовать элемент управления с помощью XMLSerializer в C # - PullRequest
0 голосов
/ 02 февраля 2019

Я разрабатываю приложение, в котором пользователь может динамически добавлять некоторые элементы управления (кнопки, метки и ...) на панель, а затем сохранять форму со всеми добавленными элементами управления.Для сохранения я использую XMLSerializer, но он выдает мне эту ошибку

Невозможно сериализовать член System.ComponentModel.Component.Site типа System.ComponentModel.ISite, потому что это интерфейс.

Я хочу знать, как сохранить элементы управления в файле XML?Если это невозможно, есть ли другой способ сделать это?

Редактировать: ( Решено )

Я нашел хороший проект, которыйименно то, что я ищу:

Простое проектирование форм во время выполнения C # Windows Forms

Спасибо

1 Ответ

0 голосов
/ 02 февраля 2019

Элементы управления имеют десятки свойств.При создании элемента управления вы устанавливаете только некоторые свойства, а остальные остаются по умолчанию.Вам нужно сохранить только указанные свойства.

Создать класс для хранения требуемых свойств:

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

Как сделать десериализацию, думаю, догадаешься.

...