C# TextWriter序列化为UTF-8字符串

C# TextWriter序列化为UTF-8字符串,c#,serialization,utf-8,C#,Serialization,Utf 8,我使用TextWriter进行序列化,因为很容易在字符串序列化和文件序列化之间切换: 序列化为字符串 TextWriter stringWriter = new StringWriter(); XmlSerializer serializer = XmlSerializer(typeof(ObjectType)) serializer.Serialize(stringWriter , objetToSerialize) return stringWriter.ToString(); 序列化到文

我使用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 version=“1.0”encoding=“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


如何将TextWriter初始化为UTF-8编码,而不是stringWriter。若要字符串,请使用

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

这将把您写入的内存流转换为一个可打印的XML,标题中带有utf-8。

我对一个类似问题的回答:您可以使用
Utf8StringWriter
,从可能的重复: