Я хочу десериализовать xml-файл, который имеет специальный символ в одном из своих полей. Символ шестнадцатеричный 0x05
и приводит к xml-файлу к 
. Я могу сериализовать объект, но его невозможно снова десериализовать. Я использую эту технику очень часто, но это первый раз, когда она не работает. Это минимальный пример задачи:XML Deserialize специальные символы
using System.Xml.Serialization;
using System.IO;
namespace XMLTest
{
class Program
{
static void Main(string[] args)
{
SpecialCharacter testobject = new SpecialCharacter();
string filename = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\testfile.xml";
//serialize
StreamWriter writer = System.IO.File.CreateText(filename);
XmlSerializer xmlserialize = new XmlSerializer(typeof(SpecialCharacter));
xmlserialize.Serialize(writer, testobject);
writer.Flush();
writer.Close();
//deserialize
StreamReader reader = File.OpenText(filename);
XmlSerializer xmldeserialize = new XmlSerializer(typeof(SpecialCharacter));
testobject = (SpecialCharacter)xmldeserialize.Deserialize(reader);
reader.Close();
}
}
public class SpecialCharacter
{
public string special = char.ConvertFromUtf32(0x05).ToString();
}
}
Это трюк, удобный и эффективный – RoKi0815
Кажется, что Microsoft предлагает использовать' XmlReader' вместо 'XmlTextReader'. Оба работают. [Ссылка] (https://msdn.microsoft.com/de-de/library/system.xml.xmltextreader (v = vs.110) .aspx) – RoKi0815