我正在尝试反序列化以下示例 XML 文件。我已经为此 XML 文件创建了架构。在架构的帮助下,我能够将 XML 反序列化为对象。
但我的问题是我的 XML 文件上有一个 XML 注释(例如:<!----Test-->
)。反序列化器没有将注释从 XML 读取到我使用模式创建的对象。
我还注意到在评论节点的模式中没有可用的条目。
如何从 XML 文件读取注释到对象?
最佳答案
对象序列化的要点是保存对象的状态,并在以后恢复它。对象字段映射到 XML 元素和属性,反之亦然。 XMLSerializer 不会将任何内容映射到注释,反之亦然,因此您无法将注释反序列化到对象中的任何内容。
但是,如果您使用传递给 Deserialize 的 XmlReader(如@Amigable 所说) () 方法,然后您可以使用 XmlReader to separately traverse the tree寻找评论。
不幸的是,这使得将评论连接到反序列化成员变得更加困难,但也许您可以使用反序列化节点事件处理程序来帮助实现这一点。
更新:关于使用反序列化的 XmlReader 的一些详细说明:
您将代码列为:
XmlSerializer objSer = new XmlSerializer(typeof(CustomSchema));
StreamReader srmRdr = new StreamReader("Test.XML");
objForm = (CustomSchema)objSer.Deserialize(srmRdr);
我对 .NETCF 或 WM 一无所知。 (我对 XmlSerializer 也一无所知,但我只是在看 the docs 。)然而,这就是我在上面试图描述的内容。
我认为您可以为 Deserialize() 使用 XmlReader,然后重新使用它,但显然它是只向前的,因此不能重置到开头。因此,在反序列化之后,使用 XmlReader 重新打开“Test.XML”:
XmlReader xmlRdr = XmlReader.Create("Test.XML");
然后使用解析code shown here :
// Parse the file
while (xmlRdr.Read())
{
switch (xmlRdr.NodeType)
{
case XmlNodeType.Element:
// You may need to capture the last element to provide a context
// for any comments you come across... so copy xmlRdr.Name, etc.
break;
case XmlNodeType.Comment:
// Do something with xmlRdr.value
关于.net - 反序列化 XML 文件中的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3853947/