C# 我应该担心序列化期间的编码吗?
默认情况下,C# 我应该担心序列化期间的编码吗?,c#,C#,默认情况下,StringWriter将在UTF-16中公布自身。通常XML位于UTF-8中。 所以我可以通过子类化StringWriter public string Serialize(BackgroundJobInfo info) { var stringBuilder = new StringBuilder(); using (var stringWriter = new StringWriter(stringBuilder, CultureInfo.InvariantCu
StringWriter
将在UTF-16
中公布自身。通常XML
位于UTF-8
中。
所以我可以通过子类化StringWriter
public string Serialize(BackgroundJobInfo info)
{
var stringBuilder = new StringBuilder();
using (var stringWriter = new StringWriter(stringBuilder, CultureInfo.InvariantCulture))
{
var writer = XmlWriter.Create(stringWriter);
...
但我为什么要担心呢?如果我决定使用StringWriter
(像我那样)而不是Utf8StringWriter
,会怎么样?我会有臭虫吗
之后,我将把这个字符串写入
MongoDb
StringWriter
的编码属性实际上没有那么有用,因为它写入的底层对象是StringBuilder
,它生成一个.Net字符串。Net字符串在utf16中进行内部编码,但这是一个您不必担心的实现细节<代码>编码
只是从文本编写器
继承的一个属性,因为文本编写器
可能会写入编码确实重要的目标(流
,字节[]
,…)
最后,您将得到一个普通的字符串。稍后将用于序列化该字符串的编码尚未修复,如果您使用的是将字符串作为参数的MongoDb客户机实现,那么您甚至不必担心
另一方面,重写Encoding
属性的getter不会改变内部编码的方式,即使编码实际上涉及到StringWriter
这个问题的答案有用吗?
public string Serialize(BackgroundJobInfo info)
{
var stringBuilder = new StringBuilder();
using (var stringWriter = new StringWriter(stringBuilder, CultureInfo.InvariantCulture))
{
var writer = XmlWriter.Create(stringWriter);
...