如何解决C#将XML文件从给定标签解析为对象
我有一个xml文件,我想制作成一个对象的数据集被另一个标签封装,所以当我尝试对其进行解析时,由于意外的成员,它当然会引发InvalidOperationException。
我尝试阅读各种有关xml的MS Docs,并且搜索了我的问题,但是我找不到没有太多麻烦的方法就可以解决它。
我的代码:
public static ClasstoDeserialize GetobjectFromXml (string path)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ClasstoDeserialize));
System.IO.FileStream file = System.IO.File.OpenRead(path);
ClasstoDeserialize loadedobjectXml = xmlSerializer.Deserialize(file) as ClasstoDeserialize;
return loadedLicenseXml;
}
那么我怎么能告诉该程序仅从特定标记开始反序列化,因为该标记包含对象的相关xml数据?
解决方法
您可以尝试从Xml向上读取,找到您的节点,然后检索它的外部xml并将其放入XmlSerializer
中。假设您有一个像这样的简单XML文件:
<rootnode>
<!-- some nodes inside -->
<uselessNode>
<thatsWhatIWant>
<!-- some fields inside -->
<uselessNodeInside/>
<usefullNodeInside/>
</thatsWhatIWant>
</uselessNode>
</rootnode>
您可以打开XmlReader
:
XmlReader reader = XmlReader.Create("path/to/myfile.xml");
然后读取内容直至您的POI并将其存储在某个变量中:
string wantedNodeContents = string.Empty;
while (reader.Read())
{
if(reader.NodeType == XmlNodeType.Element && reader.Name == "thatsWhatIWant")
{
wantedNodeContents = reader.ReadOuterXml();
break;
}
}
有了这个,您应该可以像这样使用XmlSerializer
:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ClassToDeserialize));
System.IO.TextReader textReader = System.IO.StringReader(wantedNodeContents);
ClassToDeserialize loadedObjectXml = xmlSerializer.Deserialize(textReader) as ClassToDeserialize;
您可以选择(或除此之外)尝试为UnknownNode
和UnknownAttribute
添加一些处理程序:
xmlSerializer.UnknownNode+= new XmlNodeEventHandler(UnknownNode);
xmlSerializer.UnknownAttribute+= new XmlAttributeEventHandler(UnknownAttribute);
void UnknownNode(object sender,XmlNodeEventArgs e) { }
void UnknownAttribute(object sender,XmlAttributeEventArgs e) { }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。