我正在尝试从Rest服务反序列化xml响应。我正在实现IXmlSerializable,因为xml非常具体,我自定义序列化。响应包含非法的xml字符,但由于我无法修改xml,我将不得不处理它们。
解决方案似乎很简单:在创建我的XmlReader时,我将其提供给XmlSetting,并将ChecCharacters设置为false:
XmlReaderSettings settings = new XmlReaderSettings();
settings.CheckCharacters = false;
using (var reader = XmlReader.Create(filename, settings))
{
var xRoot = new XmlRootAttribute(RootElement);
var serializer = new XmlSerializer(typeof(T), xRoot);
return (T)serializer.Deserialize(reader);
}
检查CheckCharacters有效时设置为false。
但我仍然会遇到如下错误:
{"'', hexadecimal value 0x01, is an invalid character. Line 9, position 55."}
我认为CheckCharacters = false设置是为了避免因非法的Xml字符而引发错误?
我知道哪里出错了,为什么错误会被抛出?
thnx提前.. RAF答案 0 :(得分:2)
如果XmlReader正在处理文本数据,它始终会检查XML名称和文本内容是否有效,而不管属性设置如何。将CheckCharacters设置为false会关闭字符实体引用的字符检查。
因此,将CheckCharacters
设置为false
将无法解析无效的XML。
您可以尝试使用转义符替换二进制字符:'\x01'
与""
等。XmlReader
已禁用CheckCharacters
似乎接受这些转义符。