XmlReaderSettings CheckCharacters = false似乎不起作用

时间:2014-02-02 10:39:46

标签: c# xml xmlreader xml-deserialization

我正在尝试从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

1 个答案:

答案 0 :(得分:2)

From MSDN

  

如果XmlReader正在处理文本数据,它始终会检查XML名称和文本内容是否有效,而不管属性设置如何。将CheckCharacters设置为false会关闭字符实体引用的字符检查。

因此,将CheckCharacters设置为false将无法解析无效的XML。

您可以尝试使用转义符替换二进制字符:'\x01'""等。XmlReader已禁用CheckCharacters似乎接受这些转义符。