簡體   English   中英

如何將對象序列化為Xml

[英]How to Serialize Object to Xml

我要存儲的類:

[Serializable]
public class Storagee
{
    int tabCount;
    List<string> tabNames;
    List<EachItemListHolder> eachItemsHolder;

    public void PreSetting(int count, List<string> strings, List<EachItemListHolder> items)
    {
        tabCount = count;
        tabNames = strings;
        eachItemsHolder = items;
    }

    public void PreSetting(int count )  //debug purpose
    {
        tabCount = count;       
    }

    public int GetTabCount() { return tabCount; }
    public List<string> GetTabNames() { return tabNames; }
    public List<EachItemListHolder> GetListEachItemListHolder() { return eachItemsHolder; }

}

序列化類:

namespace Book
{
    class SaveAndLoad
    {
        public void SaveAll(Storagee str)
        {
            var path = @"C:\Temp\myserializationtest.xml";
            using (FileStream fs = new FileStream(path, FileMode.Create))
            {
                XmlSerializer xSer = new XmlSerializer(typeof(Storagee));
                xSer.Serialize(fs, str);
            }

        }

        public Storagee LoadAll()
        {
            var path = @"C:\Temp\myserializationtest.xml";

            using (FileStream fs = new FileStream(path, FileMode.Open)) //double  
            {
                XmlSerializer _xSer = new XmlSerializer(typeof(Storagee));

                var myObject = _xSer.Deserialize(fs);

                return (Storagee)myObject;

            }
        }

    }
}

主要方法(窗口形式):

class Book
{
    List<EachTab> eachTabs;
    Storagee storagee;
    SaveAndLoad saveAndLoad;
    eachTabs = new List<EachTab>();
    storagee = new Storagee();
    saveAndLoad = new SaveAndLoad();


    void Saving() 
    {
        int count = UserTab.TabCount;     // tab counts
        storagee.PreSetting(count);
        saveAndLoad.SaveAll(storagee); 
    }

} 

它生成xml文件,但不保存數據。

我在其他項目中嘗試了序列化代碼,並且該代碼有效。

但它不在此解決方案中

因為我是編碼的新手,所以我不知道問題出在哪里

特別是序列化部分。

序列化代碼的復制和粘貼調整很小

它生成xml文件,但不保存數據。

它不會保存任何數據,因為您的類沒有提供可以序列化的任何數據。 XmlSerializer僅序列化公共字段和屬性,而Storagee類沒有任何序列。

例如,您可以將公共獲取方法更改為公共屬性:

public int TabCount { get; set; }
public List<string> TabNames { get; set; }
public List<string> EachItemsHolder { get; set; }

另外,如果不選擇使用公共屬性,則還可以通過實現IXmlSerializable考慮使用自定義序列化。

暫無
暫無

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

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