gpt4 book ai didi

c# - XmlTextWriter序列化问题

转载 作者:可可西里 更新时间:2023-11-01 07:44:40 28 4
gpt4 key购买 nike

我正在尝试创建一段 xml。我用 xsd.exe 创建了数据类。根类是 MESSAGE

因此,在创建了一个MESSAGE 并填充了它的所有属性之后,我将它序列化如下:

serializer = new XmlSerializer(typeof(Xsd.MESSAGE));
StringWriter sw = new StringWriter();
serializer.Serialize(sw, response);
string xml = sw.ToString();

到目前为止一切顺利,字符串 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());
}

问题来了:使用这种方法,xml 字符串前面加上了无效的字符(臭名昭著的方 block )。
当我这样检查 char 时:

char c = xml[0];

我可以看到 c 的值为 65279。
有人知道这是从哪里来的吗?
我可以通过切断第一个字符轻松解决这个问题:

xml = xml.SubString(1);

但我宁愿知道发生了什么,也不愿盲目地删除第一个字符。

有人可以阐明这一点吗?谢谢!

最佳答案

这里是您的代码,修改后不添加字节顺序标记 ( 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());

关于c# - XmlTextWriter序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/969941/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com