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

标签 c# serialization utf-8

我使用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 编码属性为 ReadOnly

我试过:

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.ToString,使用

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

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

关于c# - TextWriter 序列化为 UTF-8 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35071369/

相关文章:

php - 用于插入 MySQL 数据库的 python 脚本 - 特殊符号 - unicode : search and store

c# - 考虑 C# 中的 "disposable"关键字

c# - 可以通过 web api 传递整数列表,还是我必须使用字符串参数

c# - 无法反序列化惰性对象

.net - 在 WCF 中 JSON 序列化 .NET DataTable 的最佳方法是什么?

尽管 UTF-8 设置,PHP MySQL 使用 Latin1(iso-8859-1)

javascript - Javascript 中正则表达式的 UTF-8 支持

c# - 无需键入其字符串目录即可访问资源文件的 URL

c# - Npgsql参数化语句

针对不同上下文的 Java 序列化