我尝试使用以下代码加载XML文件:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));
StreamReader reader = new StreamReader(fileName);
object myobject = xmlSerializer.Deserialize(reader);
当文件包含这样的评论时:
<?xml version="1.0" encoding="utf-8"?>
<!-- edited with XMLSpy v2007 sp2 -->
<route>
<!--File created on 26-Nov-2010 12:36:42-->
<file_content>1
<!--0 = type1 ; 1 = type2-->
</file_content>
</route>
XmlSerializer返回一个错误,如
Unexpected node type Comment. ReadElementString method can only be called on elements with simple or empty content
当我在文件中删除此注释时,它工作正常.
我不知道问题出在哪里,有什么想法吗?
最佳答案:
正如您所看到的,序列化XML中不允许使用注释,但这应该对您没有任何问题.您可能无法控制源XML但控制反序列化过程,因此只需在反序列化之前删除所有注释:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(myobject));
// load document
XmlDocument doc = new XmlDocument();
doc.Load(filename);
// remove all comments
XmlNodeList l = doc.SelectNodes("//comment()");
foreach (XmlNode node in l) node.ParentNode.RemoveChild(node);
// store to memory stream and rewind
MemoryStream ms = new MemoryStream();
doc.Save(ms);
ms.Seek(0, SeekOrigin.Begin);
// deserialize using clean xml
xmlSerializer.Deserialize(XmlReader.Create(ms));
如果您的对象很大并且您在短时间内对其中的大量对象进行反序列化,那么我们可以调查一些框架外的快速Xpath读取器.