2017-02-22 55 views
0

我創建了一個序列化類,並增加了一些對象。 現在我想一個XML文件來創建(基於該類),當我點擊一個按鈕,所以我這樣做:轉換字符串的System.IO.Stream

private void Button1_Clicked(object sender, EventArgs e) 
     { 
      string fileName = "Data.xml"; 
      MySerializableClass msc = new MySerializableClass(); 
      XmlSerializer serializer = new XmlSerializer(typeof(MySerializableClass)); 
      StreamWriter sw = new StreamWriter(fileName, Encoding.UTF8); //'filename' is underlined 
      serializer.Serialize(sw, msc); 
      sw.Close(); //'Close' is underlined 
      //'StreamWriter' does not contain a definition for 'Close' [...] 
     } 

不幸的是我得到了以下錯誤:無法轉換'字符串''System.IO.Stream'。這是什麼意思?我不明白爲什麼編碼爲UTF8不起作用。使用沒有編碼給我同樣的錯誤。

+1

作爲一個側面說明,請嘗試在StreamWriter上使用'using'語句 – maccettura

回答

4

StreamWriter的構造函數的參數錯誤..

 string fileName = "your file path"; 
     using(FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate)) 
     { 
      using (StreamWriter sw = new StreamWriter(fileStream, Encoding.UTF8)) 
      { 
       MySerializableClass msc = new MySerializableClass(); 
       XmlSerializer serializer = new XmlSerializer(typeof(MySerializableClass)); 
       serializer.Serialize(sw, msc); 
      } 
     } 

,如果你想沒有的FileStream,使用此構造..的StreamWriter(路徑字符串,布爾追加,編碼編碼)

 string fileName = "your file path"; 
     using (StreamWriter sw = new StreamWriter(fileName, true, Encoding.UTF8)) 
     { 
      MySerializableClass msc = new MySerializableClass(); 
      XmlSerializer serializer = new XmlSerializer(typeof(MySerializableClass)); 
      serializer.Serialize(sw, msc); 
     } 
+0

非常感謝你,先生!我從來沒有使用序列化,所以我只是在這裏看看https://msdn.microsoft.com/en-us/library/szzyf24s(v=vs.110).aspx,並認爲它會很容易。祝你有美好的一天! – RoloffM

+0

是否有可能不存在「的FileStream」在PCL?我得到「類型或名稱空間名稱」文件流「無法找到」錯誤。有任何想法嗎? – RoloffM

1

請參閱StreamWriter的文檔。 https://msdn.microsoft.com/en-us/library/system.io.streamwriter(v=vs.110).aspx

試試這個過載StreamWriter sw = new StreamWriter(fileName, false, Encoding.UTF8);

或者你將需要從「data.xml中」文件中創建一個流,而不是僅僅通過文件名。

+0

好的,謝謝。我只是看着這個例子https://msdn.microsoft.com/en-us/library/szzyf24s(v=vs.110).aspx andthought它會工作。那麼,爲了獲得我想要的結果,我將如何更改代碼? – RoloffM

+0

@levent的答案提供了一個完整的解決方案。我更新了我的答案,以包括應該爲你工作的超負荷。您也可以只提供文件名而不是文件名和編碼。 –

+0

SW(文件名,假的,Encoding.UTF8)不會工作,一定要嘗試@勒的解決方案,但謝謝你的好意! – RoloffM