如何将对象序列化为Xml

时间:2018-09-28 19:21:17

标签: c# xml save

我要存储的课程:

[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文件,但不保存数据。

我在其他项目中尝试了序列化代码,并且该代码有效。

但它不在此解决方案中

由于我是编码的新手,所以我不知道问题出在哪里

尤其是序列化的部分。

序列化代码的复制和粘贴稍加修改

1 个答案:

答案 0 :(得分:1)

  

它生成xml文件,但不保存数据。

它不保存任何数据,因为您的类不提供可以序列化的任何数据。 XmlSerializer仅序列化公共字段和属性,而Storagee类没有任何内容。

例如,您可以将公共获取方法更改为公共属性:

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

或者,如果不选择使用公共属性,则还可以通过实现IXmlSerializable来考虑使用自定义序列化。