2014-02-11 4 views
0

в один класс я создаю с кнопкой мыши на XML-документ:Xml Сериализация и писатель

private void buttonCreate_Click(object sender, RoutedEventArgs e) 
    { 
     DialogResult result = folderElg.ShowDialog(); 

     if (result == System.Windows.Forms.DialogResult.OK) 
     { 
      textBoxPath.Text = folderElg.SelectedPath; 
      userConfigurePath = folderElg.SelectedPath; 
     } 
     XmlDocument toolConfig = new XmlDocument(); 
     XmlNode myRoot;        
     myRoot = toolConfig.CreateElement("Tool");  
     toolConfig.AppendChild(myRoot); 
     toolConfig.Save(@userConfigurePath + "\\config.xml");} 

Там у меня нет проблем. Создается папка и файл xml.

Так в другом классе я хочу сериализации объектов в файл XML «config.xml» (переменная userConfigurePath статично в Classe упоминалось выше):

public partial class MainWindow : Window 
{ 
    private string inputNewTool = ""; 
    private OpenFileDialog dlg = new OpenFileDialog();  

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void buttonAdd_Click(object sender, RoutedEventArgs e) 
    { 
     InputDialog input = new InputDialog(); 
     input.ShowDialog(); 
     inputNewTool = input.enteredTxt; 

     if (inputNewTool != null) 
     { 
      System.Windows.Forms.MessageBox.Show("Chose the Tool's directory"); 
      dlg.DefaultExt = ".txt"; 
      dlg.Filter = "Text documents (.txt)|*.txt"; 

      if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
      { 
       Tool tool = new Tool(); 
       tool.Name = inputNewTool; 
       tool.Path = dlg.FileName; 
       XmlSerializer serializer = new XmlSerializer(tool.GetType()); 
       StreamWriter writer = new StreamWriter(@Start.userConfigurePath + 
       "\\config.xml"); 
       serializer.Serialize(writer.BaseStream, tool); 
      } 

     } 

Результатом является то, что объект ISN 't сохранен в файле config.xml. Зачем?

Редактировать Класс Автомата:

public class Tool 
{ 
    public string Name { get; set; } 
    public string Path { get; set; } 

    public Tool() { } 
} 

Второе редактирование:

Я вижу, что я не могу удалить Мануэлю эти папки (после закрытия приложения) с файлом XML, когда он будет создан. Зачем?

Третье редактирование:

я изменил код так:

if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
      { 
       Tool tool = new Tool(); 
       tool.Name = inputNewTool; 
       tool.Path = dlg.FileName; 
       XmlSerializer serializer = new XmlSerializer(tool.GetType()); 
       using (var writer = new StreamWriter(@Start.userConfigurePath + 
       "\\config.xml")) 
       { 
        serializer.Serialize(writer.BaseStream, tool); 
        writer.Close(); 
       } 

Теперь первый объект сериализации. Но если я создаю другой инструмент таким же образом, config.xml не принимает его. Только первый инструментарий сериализуется:

<?xml version="1.0"?> 
<Tool xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<Name>dffss</Name> 
<Path>D:\Users\xxxx\Documents\schulewochenbericht.txt</Path> 
</Tool> 
+0

Что значит «объект не сохраняется в config.xml»? Вы получили сообщение об ошибке? или Вы получаете неожиданный результат? –

+0

Если я открываю xml-файл, нет объекта с его именем и путем – LittleProgrammer

+1

Является ли ваш класс Tool помеченным с помощью атрибута serializable? – rageit

ответ

4

Вам необходимо закрыть объект StreamWriter, чтобы очистить данные в файле. Пожалуйста, попробуйте следующее:

  XmlSerializer serializer = new XmlSerializer(tool.GetType()); 
      using (var writer = new StreamWriter(@Start.userConfigurePath + "\\config.xml")) 
      { 
       serializer.Serialize(writer.BaseStream, tool); 
      } 
+0

hm Нет изменений в результате – LittleProgrammer

+0

Убедитесь, что '@ Start.userConfigurePath' содержит правильный путь к файлу config.xml. – wdosanjos

+0

Содержите правильный путь: (вам нужна дополнительная информация? Тогда я добавлю их в mai npost – LittleProgrammer

0

В дополнение к ответу от wdosanjos, вы также должны понимать, что вы не можете просто написать последовательность Tool объектов. Если вы хотите написать более одного Tool, вам необходимо написать массив или список из Tool.

+0

. Да, спасибо, я догадался. – LittleProgrammer

Смежные вопросы