c#中使用XML反序列化
本文关键字:XML 反序列化 | 更新日期: 2023-09-27 18:11:42
如何反序列化以下XML:需要读取AdapterName,ConnectorIndex和ViewType
<?xml version="1.0" encoding="utf-8"?>
<MonitorConfiguration>
<System Type="1"> </System>
<Adapters>
<Adapter Name="P1" ></Adapter>
<Monitors>
<Monitor ConnectorIndex="P1" ViewType="C1"></Monitor>
<Monitor ConnectorIndex="P2" ViewType="C2"></Monitor>
<Monitor ConnectorIndex="P2" ViewType="C2"></Monitor>
<Monitor ConnectorIndex="P2" ViewType="C2"></Monitor>
</Monitors>
<Adapter Name="P2" ></Adapter>
<Monitors>
<Monitor ConnectorIndex="P4" ViewType="C3"></Monitor>
<Monitor ConnectorIndex="P5" ViewType="C5"></Monitor>
<Monitor ConnectorIndex="P6" ViewType="C6"></Monitor>
<Monitor ConnectorIndex="P7" ViewType="C7"></Monitor>
</Monitors>
</Adapters>
</MonitorConfiguration>
使用反序列化方法
如果需要使用序列化,首先应该有一个与xml文件结构相同的类。我们有一个类,比如MonitorConfiguration
,里面有Adapters
, Moniters
等等的列表。
你可能会发现这篇文章对基本理解xml序列化很有帮助。
一旦有了xml等效类型,就可以使用XmlSerializer
从xml中创建对象。
// De-Serializes the request into class object
public T DeserializeXml<T>(XmlNode xmlToDesearialized)
{
if (xmlToDesearialized == null) throw new ArgumentNullException("xmlToDesearialized");
T deserializedObject = default(T);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (StringReader stringReader = new StringReader(xmlToDesearialized.OuterXml))
{
XmlTextReader xmlTextReader = new XmlTextReader(stringReader);
deserializedObject = (T)xmlSerializer.Deserialize(xmlTextReader);
}
return deserializedObject;
}
你可以试试-
var xml = new XmlDocument();
xml.Load(new StreamReader(xml));
foreach (XmlNode x1 in xml.GetElementsByTagName("Adapter"))
{
Console.WriteLine(x1.Attributes["Name"].Name + "::" + x1.Attributes["Name"].Value);
}
var p = xml.GetElementsByTagName("Monitors");
foreach (XmlNode x in p)
{
foreach (XmlElement e in x)
{
Console.WriteLine(e.Attributes["ConnectorIndex"].Name + "::" + e.Attributes["ConnectorIndex"].Value);
Console.WriteLine(e.Attributes["ViewType"].Name + "::" + e.Attributes["ViewType"].Value);
}
}
但是从下次开始,在你问问题之前,先尝试一下。