【发布时间】:2017-08-23 08:16:36
【问题描述】:
我对 XmlSerializer 有疑问。在我巨大的 XML 文件中,有一些空字符 (\u0000),因此 XmlSerializer (Deserializer) 给了我一个错误。我发现我需要将 Normalization 设置为 false(通过:https://msdn.microsoft.com/en-us/library/aa302290.aspx),所以我尝试了这个:
XmlSerializer deserializer = new XmlSerializer(typeof(T));
XmlTextReader reader = new XmlTextReader(filename);
reader.Normalization = false;
return (T)deserializer.Deserialize(reader);
当我使用 XmlReader 时,我也尝试了第二种可能性,因为 MSDN 也建议,我尝试将 CheckCharacters 设置为 false,如下所示:
XmlSerializer deserializer = new XmlSerializer(typeof(T));
XmlReaderSettings settings = new XmlReaderSettings() { CheckCharacters = false };
using (XmlReader reader = XmlReader.Create(filename, settings))
{
return (T)deserializer.Deserialize(reader);
}
`
但两种解决方案都给了我相同的结果:InvalidOperationException on the line and column in XML where is Null character.
你能给我一个建议吗?我需要将 XML 结构“加载”到我定义的类中。如果没有这些字符的行,它可以正常工作。
谢谢! :)
编辑:我忘了说,我试图将内容加载到字符串并更新字符串,但插入的内容太大,所以我得到 System.OutOfMemoryException,如果我尝试逐行解析文件,它太慢了。 :(
【问题讨论】:
-
这可能会有所帮助.. stackoverflow.com/questions/306877/…
-
或者,更有可能是Escape invalid XML characters in C#。
-
谢谢!但是所有这些方法都是基于将内容加载到字符串中,但是我有非常大的文件,所以我得到了 System.OutOfMemoryException。我以前试过这个。如果我尝试逐行解析它,那么我的使用速度会变慢。 :(
-
文件是否包含
NUL代码点,或者它是否包含在 XML 中无效的实体(如�)?在前一种情况下,您可以通过创建TextReader来回避问题,在XmlTextReader看到它们之前将NUL字符替换为其他字符。如果实体本身无效,那就有点太复杂了(但CheckCharacters应该已经处理好了)。但是,哪个类抛出异常 --XmlTextReader或XmlSerializer? -
另外,为什么它包含
NUL个字符,有什么线索吗?我猜该文件不是由XmlSerializer生成的,还是这样?
标签: c# xml serialization xmlserializer xmlreader