我将一个C#对象序列化为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文档在第一行显示如下内容:
<?xml version="1.0" encoding="UTF-16"?>
我尝试将XmlTextWriter中的编码从Encoding.Unicode更改为Encoding.UTF8,但这不会更改XML文档的第一行,它仍然显示UTF-16。
我还尝试使用带有4个参数(writer,object,namespaces,encoding)的Serialize方法签名,并指定UTF8作为编码,但也没有更改XML文档规范。
我相信我只需要更改XML文档中显示的编码为UTF-8,第三方供应商就会满意。我无法弄清楚我做错了什么。