Как сериализовать объект в Xml - PullRequest
0 голосов
/ 28 сентября 2018

Класс, который я хочу хранить:

[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 голосов
/ 28 сентября 2018

Создает XML-файл, но не сохраняет данные.

Он не сохраняет никаких данных, поскольку ваш класс не предоставляет никаких данных, которые он может сериализовать.XmlSerializer только сериализует открытые поля и свойства, а класс Storagee не имеет никаких.

Вы можете, например, изменить ваши общедоступные методы получения на общедоступные свойства:

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

В качестве альтернативы, если использование общедоступных свойств не является опцией, можно также использовать пользовательскую сериализацию, реализовав IXmlSerializable .

...