2011-02-24 135 views
0

您好我有以下代碼來執行XML序列化:時發生錯誤,生成XML文檔

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; 

      FormSaving abc = new FormSaving(); 
      if (MajorversionresultLabel != null && MajorversionresultLabel.Content != null && MajorversionLabel.Content.ToString() != string.Empty) 
      abc.Majorversion = MajorversionresultLabel.Content.ToString(); 
      //abc.Minorversion = MinorversionresultLabel.Content.ToString(); 
      //abc.Projectnumber = ProjectnumberresultLabel.Content.ToString(); 
      //abc.Buildnumber = BuildnumberresultLabel.Content.ToString(); 
      //abc.Previousbuildversion = PreviousbuildversionresultLabel.Content.ToString(); 
      abc.Startzbuildfrom = StartzbuildfromcomboBox.SelectedItem; 

      using (Stream savestream = new FileStream(savepath, FileMode.Create)) 
      { 

        XmlSerializer serializer = new XmlSerializer(typeof(FormSaving)); 
        serializer.Serialize(savestream, abc); 
      } 



     } 

錯誤「時發生錯誤,生成XML文檔」在serializer.Serialize(savestream, abc);

我的形式發生節能等級:

public class FormSaving 
     { 

      public string Majorversion 
      { 
       get; 

       set; 

      } 
      public string Minorversion 
      { 
       get; 

       set; 

      } 
      public string Projectnumber 
      { 
       get; 

       set; 

      } 
      public string Buildnumber 
      { 
       get; 

       set; 

      } 
      public string Previousbuildversion 
      { 
       get; 

       set; 

      } 
      public object Startzbuildfrom 
      { 
       get; 

       set; 
      } 
    } 

任何人都可以幫我解決這個問題嗎?

編輯:

我試過,但它不工作,以及:在 「Load按鈕」

StartzbuildfromcomboBox.SelectedItem = abc.Startzbuildfrom; 

這裏是

abc.Startzbuildfrom = StartzbuildfromcomboBox.SelectedItem.ToString(); 

下的 「保存按鈕」

如何填充我的組合框項目:

<ComboBox Height="23" Margin="577,72,497,0" Name="StartzbuildfromcomboBox" VerticalAlignment="Top"><ComboBoxItem>library</ComboBoxItem></ComboBox> 
+0

是FormSaving您已經定義了一個自定義類?我以前沒有聽說過,也沒有在Google上找到任何關於它的參考。如果是這樣,你能否請張貼它,或者如果沒有,給我一個鏈接,我可以找到更多的信息。謝謝。 – joshhendo 2011-02-24 06:01:58

+0

@joshhendo嗨,我剛剛編輯添加類。謝謝 – jeremychan 2011-02-24 06:11:40

+0

減去1.答案沒有被標記爲正確的,在對許多代碼行進行排序之後,很清楚發生了什麼,但是這是一個很好的SO問題,答案應該清楚地表明對問題的洞察力和清晰的解決方案。這整篇文章的最大問題是,一個人在這裏跟隨鏈接將很難找出如何解決這個問題。沒有這些變化,這篇文章對SO知識庫幾乎沒有什麼影響,並且增加了比內容更多的噪音。 – MedicineMan 2011-02-25 01:55:54

回答

0

儘管object在技術上是可序列化的類型,但Startzbuildfrom的具體類型會被遮擋。事實上,你正試圖序列化一個ComboBoxItem,它不是可序列化的。嘗試使用Startzbuildfrom屬性的可序列化類型,並使用組合框的SelectedValue屬性而不是SelectedItem屬性設置其值。

+0

您好保羅感謝您的信息,我不知道。所以如果我要序列化一個組合框選擇項目,我應該怎麼做呢? – jeremychan 2011-02-24 06:19:45

+0

object是C#關鍵字,它是Object類型的別名,它是可序列化的。 – 2011-02-24 06:23:13

+0

綁定到列表框的值成員的數據的實際類型是什麼?您應該將它用於Startzbuildfrom屬性的類型(只要它是可序列化的)。另外,使用SelectedValue而不是SelectedItem。我已經更新了我的答案。對不起,原件不完整,並有錯誤。 – 2011-02-24 06:28:00

0

StartzbuildcomboBox的數據來源是什麼?

更具體地說,每個StartzbuildcomboBox.SelectedItem的DataItem的類型是什麼?

你還可以包含InnerException嗎?

最可能的原因可能是Startzbuildfrom(不應該是StartzBuildFrom?)被分配給XmlSerializer不知道的類型。

如果您知道該類型,然後用XmlInclude裝飾FormSaving。

[XmlInclude(typeof(type-of-selected-combobox-selected-item))] 
public class FormSaving 
{ 
    ......... 
+0

您好,感謝您的輸入。我沒有任何實際的數據源。我做的是在我的xaml中: library 和我不確定關於數據項。什麼是innerexception? – jeremychan 2011-02-24 06:42:17

+0

任何人都可以幫助我嗎? – jeremychan 2011-02-24 08:56:57

+0

快速修復:將Startzbuildfrom類型設置爲String而不是Object。同時分配abc.Startzbuildfrom = StartzbuildcomboBox.SelectedItem.ToString();這應該工作。 – 2011-02-24 09:55:55

0

好解決,

我想這:

public class FormSaving 
     { 
      ... 

      public int Startzbuildfrom 
      { 
       get; 

       set; 
      } 


     } 
... 
abc.Startzbuildfrom = StartzbuildfromcomboBox.SelectedIndex; 

... 
StartzbuildfromcomboBox.SelectedIndex = abc.Startzbuildfrom;