c# - Xml Serializer 中的注释问题

标签 c# .net-4.0 xmlserializer xml-comments

我尝试使用以下代码加载 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/

相关文章:

Java SOAP XML 序列化错误

javascript - 在 Javascript 函数中包含 Razor 格式的字符串

c# - 使用 C# 进行文件压缩的​​最佳方法

c# - 如何让新的异步语义在 VS2017 RC 中工作?

c# - 我们还应该使用服务器端网格还是 Javascript 网格?

c# - 序列化类时出现 Stackoverflow 异常

c# - 用于选择特定节点下的节点(中间有零个或多个节点)的 XPath

c# - 在 .Net 4 中保留安全信息

c# - 如何从 C# 连接到正在运行的 outlook 实例

c# - 如何使用 protobuf-net 进行 xml 序列化?