将XML中的键值对反序列化为c#对象

将XML中的键值对反序列化为c#对象,c#,.net,xml,deserialization,C#,.net,Xml,Deserialization,我有如下所示的XML <Device-array> <Device> <id>8</id> <properties> <PropKeyValuePair>...</PropKeyValuePair> <PropKeyValuePair>...</PropKeyValuePair> </properties> </D

我有如下所示的XML

 <Device-array>
   <Device>
    <id>8</id>
    <properties>
     <PropKeyValuePair>...</PropKeyValuePair>
     <PropKeyValuePair>...</PropKeyValuePair>
    </properties>
   </Device>
   <Device>...</Device>
   <Device>...</Device>
 </Device-array>

需要建议。

您可以使用LINQ to XML而不是反序列化,并获得所需的:ID列表:

var xDoc = XDocument.Load("FilePath.xml");

var ids = xDoc.Root
              .Elements("Device")
              .Select(x => (int)x.Element("id"))
              .ToList();
如果确实需要使用反序列化,可以省略不需要的属性,
XmlSerializer
将反序列化刚声明的内容,跳过类中未声明的元素

更新

要在匿名类型列表中获取更多而不仅仅是一个名称,请执行以下操作:

var ids = xDoc.Root
              .Elements("Device")
              .Select(x => new {
                  Id =  (int)x.Element("id"),
                  Name = (string)x.Element("name")
              })
              .ToList();

如果您只需要ID,为什么要将keyvaluepairs添加到类中?我敢肯定,反序列化时,您不引用的标记将被忽略。假设我有一个500个设备的数组,每个设备中只需要ID。林克的表现是否更好?我不知道。你必须测量它。它绝对更可读,更易于使用,因为您不必声明任何类,代码也非常简单。谢谢你的回复。假设还有一个元素“Name”。我可以从Linq查询中获得id和相应名称的列表吗?当然可以。您可以使用匿名类型来获取,而无需其他类。
var ids = xDoc.Root
              .Elements("Device")
              .Select(x => new {
                  Id =  (int)x.Element("id"),
                  Name = (string)x.Element("name")
              })
              .ToList();