fre*_*tje 15 .net c# serialization
我正在尝试创建一个xml.我用xsd.exe创建了数据类.根类是MESSAGE.
因此,在创建MESSAGE并填充其所有属性后,我将其序列化为:
serializer = new XmlSerializer(typeof(Xsd.MESSAGE));
StringWriter sw = new StringWriter();
serializer.Serialize(sw, response);
string xml = sw.ToString();
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,字符串xml包含有效(UTF-16编码)xml.现在我喜欢用UTF-8编码创建xml,所以我这样做:
编辑:忘记包含流的声明
serializer = new XmlSerializer(typeof(Xsd.MESSAGE));
using (MemoryStream stream = new MemoryStream())
{
XmlTextWriter xtw = new XmlTextWriter(stream, Encoding.UTF8);
serializer.Serialize(xtw, response);
string xml = Encoding.UTF8.GetString(stream.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
问题就出现了:使用这种方法,xml字符串前面有一个无效的char(臭名昭着的方块).
当我像这样检查char:
char c = xml[0];
Run Code Online (Sandbox Code Playgroud)
我可以看到c的值为65279.
任何人都知道这是来自哪里?
我可以通过切掉第一个字符来轻松解决这个问题:
xml = xml.SubString(1);
Run Code Online (Sandbox Code Playgroud)
但我宁愿知道发生了什么,而不是盲目地削减第一个字符.
有人可以对此有所了解吗?谢谢!
Chr*_*Rea 16
这是您的代码修改为不添加字节顺序标记(BOM):
var serializer = new XmlSerializer(typeof(Xsd.MESSAGE));
Encoding utf8EncodingWithNoByteOrderMark = new UTF8Encoding(false);
XmlTextWriter xtw = new XmlTextWriter(stream, utf8EncodingWithNoByteOrderMark);
serializer.Serialize(xtw, response);
string xml = Encoding.UTF8.GetString(stream.ToArray());
Run Code Online (Sandbox Code Playgroud)