2017-02-22 49 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