2017-02-22 71 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' [...] 
     } 

К сожалению, я получаю следующее сообщение об ошибке: неконвертироватьиз'String'до'System.IO.Stream'. Что это значит? Я не понимаю, почему кодирование UTF8 не работает. Использование без кодирования дает мне ту же ошибку.

+1

В качестве примечания , попробуйте использовать инструкцию 'using' на вашем StreamWriter – 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 (строка пути, BOOL Append, кодирование кодировка)

 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

Возможно ли, что в PCL нет «FileStream»? Я получаю сообщение об ошибке «Тип или имя пространства имен« filestream »не найден». Есть идеи? – 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 и думал, что это сработает. Итак, как мне изменить код, чтобы получить результаты, которые я хочу? – RoloffM

+0

Ответ от @levent дает полное решение. Я обновил свой ответ, чтобы включить перегрузку, которая должна работать для вас. Вы также можете просто указать имя файла, а не имя файла и кодировку. –

+0

sw (fileName, false, Encoding.UTF8) тоже не будет работать, нужно попробовать решение @ levent, но спасибо вам! – RoloffM