Я пытаюсь создать кусок xml. Я создал dataclasses с 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. Теперь мне нравится создавать xml с кодировкой UTF-8, поэтому я делаю это вот так:
Изменить: забыл включить объявление потока
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 добавляется с недопустимым char (печально известный квадрат).
Когда я проверяю char следующим образом:
char c = xml[0];
Я вижу, что c имеет значение 65279.
Кто-нибудь знает, откуда это происходит?
Я могу легко решить это, отключив первый char:
xml = xml.SubString(1);
Но я предпочел бы знать, что происходит, чем слепо разрезать первый char.
Кто-нибудь может пролить свет на это? Спасибо!