LOADING

加载过慢请开启缓存 浏览器默认开启

关于使用StringWrite序列化时修改Unicode的小问题

近期碰到的一个小问题,大致是这样的:

需要将一串字符串序列化为xml,这里是采用StringWriter进行承载,大致如下:

var serializer = new XmlSerializer(typeof(Class1));
using var sw = new StringWriter();
serializer.Serialize(sw,class2.property);
.............

但在使用序列化后的xml进行反序列化时报如下错:

System.InvalidOperationException:“There is an error in XML document (0, 0).”

XmlException: There is no Unicode byte order mark. Cannot switch to Unicode.

查看xml文件发现第一行:

encoding = “utf-16”

debug发现是在序列化时加上的Unicode,查看StringWriter源码发现该类下面有一个

public override Encoding Encoding { get; }

再进入父类TextWriter发现其中有一个只读的抽象属性

public abstract Encoding Encoding { get; }

故创建一个UTF8Writer继承自StringWriter后重写Encoding

        public sealed class UTF8Writer : StringWriter
        {
            public override Encoding Encoding => Encoding.UTF8;
        } 

问题解决

Tip:非特殊情况不要硬编UTF8