我尝试使用以下代码加载 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));
如果你的对象很大并且你在短时间内反序列化了大量的对象,howler,我们可以研究一些框架外的快速 Xpath 阅读器。
关于c# - Xml Serializer 中的注释问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4919280/