XML 序列化,包括编码信息和自定义命名空间
XML Serialization, Include encoding info and customized namespace
我正在通过以下代码
序列化 MyXMLData class
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyXMLData));
FileStream fileStream = new FileStream(fileName, FileMode.Create);
xmlSerializer.Serialize(fileStream, myXMLData);
fileStream.Close();
输出 header 类似于
<?xml version="1.0"?>
<MyXMLData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
我的问题
1) 我想包含像`?xml version="1.0" encoding ="utf-8" ?> 这样的编码数据。如何做到这一点?
2) 我想更改命名空间并放置我自己的自定义命名空间(这是我的要求)
而不是 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
,我只想拥有类似 xmlns="http://www.mydata.org"
的东西。
我可以读取xml文件并在写入后替换内容,但我想知道,是否可以在写入xml文件时一步完成?
您可以执行以下步骤。
1. 实现你的第一个需求:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyXMLData));
var fname = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "filename.xml");
var appendMode = false;
var encoding = Encoding.GetEncoding("UTF-8");
using(StreamWriter sw = new StreamWriter(fname, appendMode, encoding))
{
xmlSerializer.Serialize(sw, MyXMLData);
}
- 实现第二个要求
在 XMLSerializer class 的构造函数中,添加这样的命名空间:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyXMLData), "http://www.mydata.org");
此解决方案按预期工作正常
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyXMLData));
XmlSerializerNamespaces ns1 = new XmlSerializerNamespaces();
ns1.Add("", "http://www.mydata.org");
Encoding encoding = Encoding.GetEncoding("UTF-8");
using (StreamWriter sw = new StreamWriter(fileName, false, encoding))
{
xmlSerializer.Serialize(sw, myXMLData, ns1);
}
我正在通过以下代码
序列化 MyXMLData classXmlSerializer xmlSerializer = new XmlSerializer(typeof(MyXMLData));
FileStream fileStream = new FileStream(fileName, FileMode.Create);
xmlSerializer.Serialize(fileStream, myXMLData);
fileStream.Close();
输出 header 类似于
<?xml version="1.0"?>
<MyXMLData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
我的问题
1) 我想包含像`?xml version="1.0" encoding ="utf-8" ?> 这样的编码数据。如何做到这一点?
2) 我想更改命名空间并放置我自己的自定义命名空间(这是我的要求)
而不是 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
,我只想拥有类似 xmlns="http://www.mydata.org"
的东西。
我可以读取xml文件并在写入后替换内容,但我想知道,是否可以在写入xml文件时一步完成?
您可以执行以下步骤。
1. 实现你的第一个需求:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyXMLData));
var fname = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "filename.xml");
var appendMode = false;
var encoding = Encoding.GetEncoding("UTF-8");
using(StreamWriter sw = new StreamWriter(fname, appendMode, encoding))
{
xmlSerializer.Serialize(sw, MyXMLData);
}
- 实现第二个要求
在 XMLSerializer class 的构造函数中,添加这样的命名空间:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyXMLData), "http://www.mydata.org");
此解决方案按预期工作正常
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyXMLData));
XmlSerializerNamespaces ns1 = new XmlSerializerNamespaces();
ns1.Add("", "http://www.mydata.org");
Encoding encoding = Encoding.GetEncoding("UTF-8");
using (StreamWriter sw = new StreamWriter(fileName, false, encoding))
{
xmlSerializer.Serialize(sw, myXMLData, ns1);
}