Désérialisation XML Tableau d'Éléments
Donc, la désérialisation de travail est cependant j'ai un peu de xml comme ceci:
<File>
<Stuff>stuff</Stuff>
<Devices>
<Device Type="1">
<Number>1</Number>
</Device>
<Device Type="2">
<Number>2</Number>
</Device>
</Devices>
</File>
Quand il arrive à l'éventail de dispositifs... le premier dispositif est le seul qui est renseigné dans un objet. Voici les catégories:
XmlSerializer deserializer;
XmlRootAttribute xRoot = new XmlRootAttribute();
FileStream stream = new FileStream(CONFIG_PATH, FileMode.Open);
XmlReader reader = new XmlTextReader(stream);
//Details configuration area.
xRoot.ElementName = "File";
xRoot.IsNullable = true;
deserializer = new XmlSerializer(typeof(File), xRoot);
Configuration = (File)deserializer.Deserialize(reader);
[Serializable()]
[XmlRoot(ElementName = "File", IsNullable = true)]
public sealed class File
{
[XmlElement("Devices")]
public Devices Devices { get; set; }
}
//<summary>
///Configuration device elements.
///</summary>
[Serializable()]
[XmlRoot("Devices", IsNullable = true)]
public sealed class Devices
{
[XmlElement("Device")]
public DeviceElements[] DeviceElements { get; set; }
}
///<summary>
///Configuration Devices.
///</summary>
[Serializable()]
[XmlRoot("Device", IsNullable = true)]
public sealed class DeviceElements
{
[XmlAttribute("Type")]
public string DeviceType { get; set; }
[XmlElement("Number")]
public int DeviceNumber { get; set; }
}
Encore une fois, seul le premier Appareil est rempli, j'ai joué avec XmlArray Et XmlArrayItem cependant aucun d'entre eux étaient même de me donner la première valeur. Des suggestions?
Avez-vous essayé de prendre toutes les "XmlElement" et "XmlRoot" attributs? Je trouve sérialisation fonctionne mieux quand je laisser les choses seul, autant que possible, et de laisser le cadre de tri pour moi.
Il n'a même pas de désérialiser si je les prends.
Essayez cette suggestion: stackoverflow.com/questions/534451/...
Chaque élément de Périphérique doit être explicitement appelé Appareil. Un périphérique peut être un nombre illimité d'éléments dans les Dispositifs de l'élément. La suggestion ci-dessus ne fonctionne pas dans mon cas.
Bonne chance ! Espérons que vous le comprendre.
Il n'a même pas de désérialiser si je les prends.
Essayez cette suggestion: stackoverflow.com/questions/534451/...
Chaque élément de Périphérique doit être explicitement appelé Appareil. Un périphérique peut être un nombre illimité d'éléments dans les Dispositifs de l'élément. La suggestion ci-dessus ne fonctionne pas dans mon cas.
Bonne chance ! Espérons que vous le comprendre.
OriginalL'auteur bl4kh4k | 2011-08-11
Vous devez vous connecter pour publier un commentaire.
Vous devez être en train de faire quelque chose de mal à un autre endroit. Juste à l'aide de la
Devices
partie de votre XML:J'ai pu réussir à désérialiser un
Devices
instance de classe avec plusieursDeviceElements
enfants compte tenu de vos classes ci-dessus en utilisant le même code que vous avez utilisé dans votre dernière question:Edit:
Utilisant le XML complet:
Ce succès désérialise pour moi:
Sur une note de côté - vous ne devriez probablement pas le nom de votre classe, de même que l'on est déjà dans le .NET framework (
System.IO.File
), également dans le code ci-dessus exemple de configuration Xml racine n'est pas nécessaire puisque vous utilisez le même nom de toute façon, il suffit de laisser cela:Difficile à dire w/o voir un exemple de code complet qui reproduit le problème serait bien de mettre à jour la question
Juste mis à jour avec le manque de classe. Si vous pouvez comprendre votre un serializedGod.
Il fonctionne très bien pour moi. Sera mise à jour de réponse.
Posté code de l'OP qui fonctionne pour moi.
OriginalL'auteur BrokenGlass