繁体   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