запутался в реализации класса в сериализации xml - PullRequest
0 голосов
/ 23 февраля 2011

Я читал книгу о сериализации.Я запутался в реализации части класса или, проще говоря, я не очень понимаю классы (возможно).

По сути, мое приложение разработано таким образом, как описано в моей книге.Я просто не понимаю класс FileSaving и, возможно, где это реализовать.Я хотел бы начать использовать сериализацию для сохранения элементов формы и перезагрузить ее через XML с помощью кнопок «Сохранить» и «Загрузить».У меня есть текстовое поле и пользовательские ключи в строках в Majorversiontextbox, и этот textbox.text затем сохраняется как MajorversionLabel.Пожалуйста, проясните мои сомнения и помогите мне с сериализацией.Спасибо!Я проясню любые сомнения по поводу моего вопроса.

РЕДАКТИРОВАТЬ

Вопрос 1. Зачем мне нужен этот класс FileSaving, когда я только получаю значения из содержимого с метки и сохраняю его вXML-файл.Вопрос 2, мой класс FileSaving объявлен правильно?Вопрос 3, зачем мне здесь и надо?

    public partial class Window1 : Window
{
...
...

        public class FileSaving
        {
            private string major;

            public string Majorversion
            {   
                get
                {   
                return major;
                }
                set
                {
                    major = value;
                }
            }
        }
        private void MajorversionupdateButton_Click(object sender, RoutedEventArgs e)
        {
        MajorversionresultLabel.Content = MajorversionTextBox.Text;
        MajorversionupdateButton.Visibility = Visibility.Hidden;
        MajorversionTextBox.Visibility = Visibility.Hidden;
        MajorversionmodifyButton.Visibility = Visibility.Visible;

        }
        private void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            string savepath;
            SaveFileDialog DialogSave = new SaveFileDialog();
            // Default file extension
            DialogSave.DefaultExt = "txt";
            // Available file extensions
            DialogSave.Filter = "XML file (*.xml)|*.xml|All files (*.*)|*.*";
            // Adds a extension if the user does not
            DialogSave.AddExtension = true;
            // Restores the selected directory, next time
            DialogSave.RestoreDirectory = true;
            // Dialog title
            DialogSave.Title = "Where do you want to save the file?";
            // Startup directory
            DialogSave.InitialDirectory = @"C:/";
            DialogSave.ShowDialog();
            savepath = DialogSave.FileName;
            DialogSave.Dispose();
            DialogSave = null;

            Filesaving abc = new FileSaving();
            abc.Majorversion = MajorversionLabel.Content;
            FileStream savestream = new FileStream(path, FileMode.Create);
            XmlSerializer serializer = new XmlSerializer(typeof(FileSaving));
            serializer.Serialize(savestream, abc);
        }

        private void LoadButton_Click(object sender, RoutedEventArgs e)
        {

            string loadpath;
            Stream checkStream = null;
            Microsoft.Win32.OpenFileDialog DialogLoad = new Microsoft.Win32.OpenFileDialog();
            DialogLoad.Multiselect = false;
            DialogLoad.Filter = "XML file (*.xml)|*.xml|All files (*.*)|*.*";
            if ((bool)DialogLoad.ShowDialog())
            {
                try
                {
                    if ((checkStream = DialogLoad.OpenFile()) != null)
                    {
                        loadpath = DialogLoad.FileName;
                    }
                }
                catch (Exception ex)
                {
                    System.Windows.MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
            else
            {
                System.Windows.MessageBox.Show("Problem occured, try again later");
            }

            FileSaving abc = new FileSaving();
            FileStream loadstream = new FileStream(loadpath, FileMode.Open);
            XmlSerializer serializer = new XmlSerializer(typeof(FileSaving));
            abc=(FileSaving)serializer.Deserialize(loadstream);
            loadstream.Close();
            MajorversionresultLabel.Content = abc.Majorversion;
        }

}

1 Ответ

0 голосов
/ 23 февраля 2011
  1. , поскольку XmlSerializer является сериализатором объектов и работает из определения типа
  2. , конечно, это будет работать
  3. Строго говоря, у вас нет, но в текущей версиивыглядит хорошо;XmlSerializer работает для публичных объектов или полей;Вы могли бы упростить до автоматически реализуемого свойства: public string MajorVersion {get;set;}

Но если вы хотите сохранить только одно строковое значение - является ли xml лишним?File.WriteAllText / File.ReadAllText может быть проще.

...