首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在.NET中将对象序列化为UTF-8XML

在.NET中将对象序列化为UTF-8XML
EN

Stack Overflow用户
提问于 2010-10-05 16:40:40
回答 2查看 163.1K关注 0票数 123

为了简洁,删除了适当的对象处理,但如果这是在内存中将对象编码为UTF-8的最简单方法,我会感到震惊。一定有更简单的方法,不是吗?

代码语言:javascript
运行
复制
var serializer = new XmlSerializer(typeof(SomeSerializableObject));

var memoryStream = new MemoryStream();
var streamWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8);

serializer.Serialize(streamWriter, entry);

memoryStream.Seek(0, SeekOrigin.Begin);
var streamReader = new StreamReader(memoryStream, System.Text.Encoding.UTF8);
var utf8EncodedXml = streamReader.ReadToEnd();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-05 17:05:28

当您再次将UTF-8读回字符串时,您的代码不会将UTF-8放入内存,因此它不再是UTF-8格式,而是回到了UTF-16格式(尽管理想情况下,最好在比任何编码级别更高的级别上考虑字符串,除非被迫这样做)。

要获得实际的UTF-8八位字节,您可以使用:

代码语言:javascript
运行
复制
var serializer = new XmlSerializer(typeof(SomeSerializableObject));

var memoryStream = new MemoryStream();
var streamWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8);

serializer.Serialize(streamWriter, entry);

byte[] utf8EncodedXml = memoryStream.ToArray();

我遗漏了和你一样的处理方法。我稍微倾向于以下几点(剩下的正常处理):

代码语言:javascript
运行
复制
var serializer = new XmlSerializer(typeof(SomeSerializableObject));
using(var memStm = new MemoryStream())
using(var  xw = XmlWriter.Create(memStm))
{
  serializer.Serialize(xw, entry);
  var utf8 = memStm.ToArray();
}

这几乎是相同的复杂度,但确实表明在每个阶段都有一个合理的选择来做其他事情,其中最紧迫的是序列化到内存以外的其他地方,例如序列化到文件、TCP/IP流、数据库等。总而言之,它并没有那么冗长。

票数 57
EN

Stack Overflow用户

发布于 2013-01-31 02:20:56

使用继承的答案非常好,只需记住覆盖初始值设定项

代码语言:javascript
运行
复制
public class Utf8StringWriter : StringWriter
{
    public Utf8StringWriter(StringBuilder sb) : base (sb)
    {
    }
    public override Encoding Encoding { get { return Encoding.UTF8; } }
}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3862063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档