Пустой сериализованный файл XML

Я получаю пустой xmlfile после сериализации объекта. Я использую Monodevelop и Unity 4. Я так долго искал в основном в этом сообществе, но я нашел только сложные проблемы с еще более сложными ответами:) Я думаю, что у меня все так просто, пожалуйста, помогите мне. (Я новичок в C#) Сериализованный объект это:

[System.Serializable]
public class information  {
    private string data1;
    private string data2;
    private string data3;

public void Data1(string text)
{
        data1 = text;
}
public string GetData1 ()
{
    return data1;   
}
    public void Data2(string text)
    {
        data2 = text;
    }
public string GetData2 ()
{
    return data2;   
}
    public void Data3(string text)
    {
        data3 = text;
    }
}

Класс сериализации это, здесь может быть проблема:

public class SaveXml {
        public void SaveData(object obj, string filename)
{
        XmlSerializer sr = new XmlSerializer(obj.GetType());    
        TextWriter writer = new StreamWriter(filename);
        sr.Serialize(writer, obj);
        writer.Close();
    }

    public string Load()
{
    if(File.Exists("accdata.xml"))
    {
        XmlSerializer xs = new XmlSerializer(typeof(information));
        FileStream read = new FileStream("accdata.xml",FileMode.Open, FileAccess.Read, FileShare.Read);
        information info = (information)xs.Deserialize(read);
        return info.GetData1();
    }
    else
    {
        return "file does not exist";
    }
}

И сериализованный и сериализованный объект вызывается с помощью меню, которое имеет следующие 2 кнопки:

if(GUI.Button(new Rect(10,50,300,100),"Save"))
{
    SaveXml saver = new SaveXml();
    information infol = new information();
    infol.Data1("textone");
    infol.Data2("texttwo");
    infol.Data3( "textthree");
    saver.SaveData(infol, "accdata.xml");
}   
if(GUI.Button(new Rect(500,50,300,100),"Load"))
{
    SaveXml saver1 = new SaveXml();
    text = saver1.Load();
}

поэтому переменный текст, который объявлен в меню класса, должен быть "textone", после того, как я нажал кнопку "Сохранить" и кнопку LoadButton. Кнопка Save создает пустой файл.

Десериализация, кажется, работает, но, конечно, в переменной data1 в Information нет строки, поэтому переменная в меню, называемая text, также пуста. Я не получаю ошибок, и я могу работать с объектом после сериализации. Так почему же моя сериализация не работает? Пожалуйста, помогите мне. Я извиняюсь за мой плохой английский и ошибки, я новичок в stackru.

3 ответа

Решение

Сериализатор Xml сериализует открытые поля / свойства, а не методы. Измените ваши методы на свойства. Например,

    public string Data2
    {
        set { data2 = value; }
        get { return data2; }
    }

Так что ваши information класс может быть

public class Information
{
    public string Data1 { get; set; }
    public string Data2 { get; set; }
    public string Data3 { get; set; }
}

Кстати: вам это не нужно Serializable приписывать. Используется только BinaryFormatter

Я не уверен, но из того, что я вижу, у вас нет открытых полей... Посмотрите здесь

А также, почему бы вам просто не использовать автоматический геттер / сеттер?

Согласно этой статье о поддержке MSDN, при использовании XmlSerializer вы выполняете только "поверхностную" сериализацию - она ​​только сериализует открытые поля / свойства. Для сериализации частных данных требуется "глубокая" сериализация, которая выглядит совершенно другим животным.

Другие вопросы по тегам