簡體   English   中英

如何在 C# 中通過 XMLSerializer 序列化控件

[英]How to serialize a control by XMLSerializer in C#

我正在開發一個應用程序,用戶可以將一些控件(按鈕、標簽和...)動態添加到面板,然后將表單與所有添加的控件一起保存。 為了保存我使用 XMLSerializer 但它給了我這個錯誤

不能序列化 System.ComponentModel.Component.Site 類型的 System.ComponentModel.ISite 成員,因為它是一個接口。

我想知道如何將控件保存在 XML 文件中? 如果不可能,有沒有其他方法可以做到這一點?

編輯:(已解決

我找到了一個很好的項目,這正是我正在尋找的:

在運行時輕松設計窗體 C# Windows 窗體

謝謝

控件有幾十個屬性。 創建控件時,您只設置了一些屬性,其余的保持默認。 您只需要保存指定的屬性。

創建一個類來存儲所需的屬性:

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

如何進行反序列化,我想,你會猜到的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM