我将C#对象序列化为XML文档,并将XML文档发送给第三方供应商。供应商告诉我文档中的编码规范是UTF-16,但XML文档包含UTF-8内容,他们无法使用它。以下是我用来创建XML文件的代码,该文件无错误地运行并创建XML文档。
// Instantiate xmlSerializer with my object type.
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));
// Instantiate a new stream and pass file location and mode.
Stream stream = new FileStream(@"C:\doc.xml", FileMode.Create);
// Instantiate xmlWriter and pass stream and encoding.
XmlWriter xmlWriter = new XmlTextWriter(stream, Encoding.Unicode);
// Call serialize method and pass xmlWriter and my object.
xmlSerializer.Serialize(xmlWriter, myObject);
// Close writer and stream.
xmlWriter.Close();
stream.Close();
当我运行时,XML Doc会在第一行显示:
<?xml version="1.0" encoding="UTF-16"?>
我尝试在XmlTextWriter中将Encoding从Encoding.Unicode更改为Encoding.UTF8,但这并没有改变XML Doc的第一行,它仍然显示UTF-16。
我还尝试使用Serialize方法签名,该签名采用4个参数(编写器,对象,命名空间,编码)和指定的UTF8作为编码,并且也没有更改XML Doc规范。
我相信我需要做的就是将XML Doc中显示的编码更改为UTF-8,第三方供应商会很高兴。我无法弄清楚我做错了什么。
答案 0 :(得分:2)
如果我从Encoding.Unicode
更改为Encoding.UTF8
,则会正确生成文件。也许您正在查看旧版本的文件?
在一个不相关的位中,您应该使用using
来确定性地处理实现IDisposable
的对象:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));
using (Stream stream = new FileStream(@".\doc.xml", FileMode.Create))
using (XmlWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8))
{
xmlSerializer.Serialize(xmlWriter, myObject);
}