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);
        ...