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>

使用反序列化方法

c#中使用XML反序列化

如果需要使用序列化,首先应该有一个与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);
    }
}

但是从下次开始,在你问问题之前,先尝试一下。