c# - 如何保存 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 文件?
解决方案
推荐阅读
- javascript - React - 不要以某种方式接受道具(Typescript)
- javascript - 当swiperjs被交互停止或被鼠标事件暂停时如何分离 - ReactJS
- r - 如何使用 SSH 连接到 R 中远程服务器上的 SQLite 数据库?
- python - 在没有管理员权限的情况下从 C# 使用 Git-bash
- google-kubernetes-engine - “generic-garbage-collector”删除了 StatefulSet 及其 pod。为什么?
- php - 会话保持随机给出未定义的数组键,而键是defiend
- cmd - 按用户名而不是 sid 过滤日志
- angular - Angular httpclient 覆盖内容类型标头
- angular - 延迟加载问题:无法匹配任何路由。网址段
- python - Django,在同一个模型中创建多个相同的字段