Попробуйте добавить XmlAtribute к идентификатору объекта.
ОБНОВЛЕНИЕ : Я добавляю пример, как вы можете десериализовать его ...
Классы:
[XmlType(AnonymousType=true)]
[XmlRoot(Namespace="", IsNullable=false)]
public class foo {
[XmlElement("barlist")]
public List<fooBarlist> barlist { get; set; }
}
[XmlType(AnonymousType=true)]
public class fooBarlist {
[XmlElement("bar")]
public List<fooBarlistBar> bar { get; set; }
[XmlAttribute()]
public byte id { get; set; }
}
[XmlType(AnonymousType=true)]
public class fooBarlistBar {
[XmlAttribute()]
public byte number { get; set; }
[XmlAttribute()]
public string value { get; set; }
}
test xml:
<foo>
<barlist id="1">
<bar number="1" value="Hi" />
<bar number="2" value="Hello" />
</barlist>
<barlist id="2">
<bar number="3" value="Bye" />
<bar number="4" value="Bye bye" />
</barlist>
</foo>
и код для десериализации xml для объекта:
XmlSerializer serializer = new XmlSerializer(typeof(foo));
XmlReader reader = XmlReader.Create("D:\\test.xml");
foo testObj = serialier.Deserialize(reader) as foo;
и тогда мы получим результат
![result](https://i.stack.imgur.com/6uMgH.jpg)