近期碰到的一个小问题,大致是这样的:
需要将一串字符串序列化为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