首页 > 解决方案 > 如何保存 ObservableCollection使用自定义 XML 标记?

问题描述

我创建了一个字符串类型的 ObservableCollection,其中包含<Subject>从 XML 文件加载的字符串。通过 TextBox 向 Collection 添加几个字符串后,我想将该 Collection 的更新状态再次保存到 XML 文件中。我希望每个字符串都有一个特定的标签,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Subjects>
 <Subject>One</Subject>
 <Subject>Two</Subject>
 <Subject>Three</Subject>
</Subjects>

我希望<Subjects>该集合中的根和每个字符串都有<Subject>孩子。

我试过这个:

namespace StudyNotes
{
    public class LocalData
    {
        public ObservableCollection<string> Subjects;

        public LocalData()
        {
            Subjects = new ObservableCollection<string>();
            LoadXmlData();
        }

        private void LoadXmlData()
        {
           XmlDocument xmlDocument = new XmlDocument();
           XmlNodeList xmlNodeList;
           using (FileStream fs = new FileStream(startupPath, FileMode.Open, FileAccess.Read))
           {
               xmlDocument.Load(fs);
               xmlNodeList = xmlDocument.GetElementsByTagName("Subject");
               foreach (XmlNode item in xmlNodeList)
               {
                   Subjects.Add(item.InnerText);
               }
               fs.Close();
            }
        }

        public void SaveXmlData()
        {   
            Subjects.Add(TextBox.Text);

            var serializer = new XmlSerializer(typeof(ObservableCollection<string>));

            using (var stream = File.Open(xmlPath, FileMode.Create))
            {
                serializer.Serialize(stream, Subjects);
                stream.Close();
            }
        }
    }
}

从 XML 加载数据效果很好,它从 XML 向 ObservableCollection 添加项目,但问题在于保存数据。它不会使用标签创建另一个 XML 节点<Subject>,而是使用<string>标签和不必要<ArrayOfString>的标签而不是<Subjects>.

<?xml version="1.0"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <string>One</string>
  <string>Two</string>
  <string>Three</string>
</ArrayOfString>

需要做什么才能将具有特定标签的节点/子节点从 ObservableCollection 添加到 XML 文件?

标签: c#xmlwpf

解决方案


推荐阅读