Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中序列化对象时如何指定XML编码#_C#_Xml_Encoding_Utf 8 - Fatal编程技术网

C# 在C中序列化对象时如何指定XML编码#

C# 在C中序列化对象时如何指定XML编码#,c#,xml,encoding,utf-8,C#,Xml,Encoding,Utf 8,我正在将C#对象序列化为XML文档,并将XML文档发送给第三方供应商。供应商告诉我文档中的编码规范是UTF-16,但是XML文档包含UTF-8内容,他们不能使用它。下面是我用来创建XML文件的代码,该文件运行时不会出错并创建XML文档 // Instantiate xmlSerializer with my object type. XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject)); // Instantiate

我正在将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文档在第一行显示:

<?xml version="1.0" encoding="UTF-16"?>

我尝试在XmlTextWriter中将编码从Encoding.Unicode更改为Encoding.UTF8,但这并没有更改XML文档的第一行,它仍然显示UTF-16

我还尝试使用Serialize方法签名,该签名接受4个参数(writer、object、namespace、encoding),并指定UTF8作为编码,并且也没有更改XML文档规范


我相信我所需要做的就是将XML文档中显示的编码更改为UTF-8,第三方供应商会很高兴的。我不知道我做错了什么。

如果我从
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);
}

我将再试一次并仔细检查。在将编码更改为UTF8之后,我再次运行了代码,它仍然输出一个带有UTF-16规范的XML文档。我会把代码改成使用using而不是close。我是个白痴。有两个地方(事件)我在做这个,我在一个地方改变它,并从另一个事件测试它。它起作用了。将XmlWriter中的编码更改为UTF8是可行的。