TextWriter 序列化为 UTF-8 字符串

本文关键字:字符串 UTF-8 序列化 TextWriter | 更新日期: 2023-09-27 18:32:17

我使用TextWriter进行序列化,因为在字符串序列化和文件序列化之间切换很容易:

序列化为字符串;

TextWriter stringWriter = new StringWriter();
XmlSerializer serializer = XmlSerializer(typeof(ObjectType))
serializer.Serialize(stringWriter , objetToSerialize)
return stringWriter.ToString();

序列化为文件;

TextWriter fileWriter = new StreamWriter(targetXMLFileName, true, Encoding.UTF8);
XmlSerializer serializer = XmlSerializer(typeof(ObjectType))
serializer.Serialize(fileWriter , objetToSerialize)
fileWriter.Close();

我的问题是,当序列化为字符串时,它会创建一个 UTF-16("?xml 版本="1.0" 编码="utf-16"?"),并且 TestWriter 编码属性是只读

我试过:

var memoryStream = new MemoryStream();
TextWriter stringWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8);
XmlSerializer serializer = XmlSerializer(typeof(ObjectType))
serializer.Serialize(stringWriter , objetToSerialize)
return stringWriter.ToString();

但它不起作用。它不是XML文档,而是生成以下字符串:"System.IO.StreamWriter"O_o

如何将文本编写器初始化为 UTF-8 编码

TextWriter 序列化为 UTF-8 字符串

而不是stringWriter.ToString,而是使用

string xml = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
return xml;

这会将您写入的内存流转换为标头中带有 utf-8 的可打印 XML。