c# - 循环中的 XML 序列化程序
问题描述
我正在尝试从我放入一个类的 dataGridView 中序列化数据,然后写入文件。但是,我有一个问题,序列化程序会将每个对象放在它自己的“文件”中,而不是将所有对象放在一个中;当我打开 .xml 文件时,您可以看到:
<?xml version="1.0" encoding="utf-8"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Id>1</Id>
<Column1>XXX</Column1>
<Column2>YYY</Column2>
</MyClass>
<?xml version="1.0" encoding="utf-8"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Id>2</Id>
<Column1>ZZZ</Column1>
<Column2>AAA</Column2>
</MyClass>
这是我用来序列化的代码。我该如何解决这个问题,这样当我打开 .xml 文件时,我只会得到一个文件,而不是像上面那样拆分?我是否必须将所有对象添加到列表中,然后从列表中写入?
private void expXML_Click(object sender, EventArgs e)
{
XmlSerializer ser = new XmlSerializer(typeof(MyClass));
TextWriter writer = new StreamWriter("Filename.XML");
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
MyClass abc = new MyClass(Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value), dataGridView1.Rows[i].Cells[1].Value.ToString(), dataGridView1.Rows[i].Cells[2].Value.ToString());
ser.Serialize(writer, abc);
}
writer.Close();
}
解决方案
好吧,我听从了建议和自己的预感;这是正确序列化数据的编辑代码:
private void expXML_Click(object sender, EventArgs e)
{
List<MyClass> newList = new List<MyClass>();
XmlSerializer ser = new XmlSerializer(typeof(List<MyClass>));
TextWriter writer = new StreamWriter("Filename.XML");
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
MyClass abc = new MyClass(Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value), dataGridView1.Rows[i].Cells[1].Value.ToString(), dataGridView1.Rows[i].Cells[2].Value.ToString());
newList.add(abc);
}
ser.Serialize(writer, newList);
writer.Close();
}
推荐阅读
- if-statement - terraform 中的 if 语句,使用 2 个不同的代码块
- typescript - Express Mongoose 填充 pre typescript 什么类型?
- apache-kafka - 找到的目录不是 topic-partition 的形式。Kafka 的日志目录(和子目录)应该只包含 Kafka 主题数据
- mysql - 如何在删除数据上备份为插入 sql?
- javascript - 在 HTML 和 Javascript {FirFox} 中强制“打开阴影根”
- javascript - 获取 .filter 不是函数的错误
- javascript - 在字符串中的某些位置添加破折号(Javascript)
- wiki - AzDo wiki 审查/锁定以避免意外编辑
- vpn - 连接到多个服务器的wireguard 1 客户端
- node.js - 将数据从 reactjs 发布到 nodejs 后如何从 nodejs 获得响应?