2011-02-23 3 views
0

직렬화에 관한 책을 읽었습니다. 클래스 부분을 구현하는 것에 대해 혼란 스럽거나 간단하게 클래스를 이해하지 못합니다 (어쩌면).XML 직렬화에 클래스를 구현하는 것에 대해 혼란 스럽습니다.

기본적으로 내 책의 단계에 따라이 방법으로 디자인 된 응용 프로그램이 있습니다. 나는 단지 FileSaving의 클래스를 이해하지 못하고 어쩌면 그것을 구현할 곳을 모른다. 직렬화를 사용하여 폼의 요소를 저장하고 "저장"및 "로드"버튼을 사용하여 XML을 통해 다시로드하기 시작합니다. 텍스트 상자와 사용자 키가 Majorversiontextbox에 문자열로 저장되어 있으며이 textbox.text는 MajorversionLabel로 저장됩니다. 제 의심을 분명히하고 직렬화로 도와주세요. 감사! 나는 나의 질문에 대한 의구심을 분명히 할 것이다.

편집 내가 레이블 만의 콘텐츠에서 값을 받고 XML 파일로 저장하고이 FileSaving 클래스가 필요합니까 왜

질문 1. 질문 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

@Marc Gravell을 (를) 편집 – jeremychan

답변

0
  1. XmlSerializer 객체 시리얼이며,
  2. 확인 유형 정의에서 작동하기 때문에, 그것은 엄격하게 그렇게하지 말
  3. 을 작동하지만 현재 버전이 있습니다 외모가 좋아 보인다. XmlSerializer은 공용 속성이나 필드에서 작동합니다. 당신은 그러나 자동으로 구현 된 속성을 단순화 수 : public string MajorVersion {get;set;}

하지만 당신은 단지 하나의 문자열 값을 저장하려면 - XML은 overfkill입니까? File.WriteAllText/File.ReadAllText은 더 간단 할 수 있습니다.

+0

안녕하세요 marc, 빠른 답장을 보내 주셔서 감사합니다. 내 응용 프로그램에는 문자열 값 이상이 포함되어 있으며 콤보 상자 항목, 체크 상자 및 문자열로 구성됩니다. Xml은 여전히 ​​더 나은 선택입니까? – jeremychan

+0

@ jeremychan 아마 –

관련 문제