Dans mon projet, le code hérité génère du code XML qui a la structure suivante:problème en C# Xml désérialisation
<Output>
<Template recordID=12>
<Employer type="String">
<Value>Google</Value>
<Value>GigaSoft inc.</Value>
</Employer>
<Designation type="String">
<Value>Google</Value>
</Designation>
<Duration type="String" />
</Template>
</Output>
Je veux désérialiser ce xml en objet qui a les propriétés suivantes (J'utilise C#):
public class EmployerInfo
{
string[] _employerName;
string[] _designation;
string _duration;
}
J'ai essayé de désérialiser ci-dessus XML en utilisant les attributs suivants autour des membres (NOTE: J'ai simplifié le code Je sais que nous ne devrions pas faire des membres de données publiques Ce code est juste à des fins expérimentales..)
[XmlElement("Template")]
public class EmployerInfo
{
[XmlElement("Employer")]
public string[] _employerName;
[XmlElement("Designation")]
public string[] _designation;
[XmlElement("Duration")]
public string _duration;
}
désérialiser, dans la classe principale, j'ai écrit:
XmlSerializer serial = new XmlSerializer(typeof(Output));
TextReader reader = new StreamReader(@"C:\sample_xml.xml");
EmployerInfo fooBar = (EmployerInfo)serial.Deserialize(reader);
reader.Close();
Après l'exécution de code ci-dessus, tous les membres objet fooBar sont définies sur null (valeurs par défaut). Je pense que c'est parce que la structure XML ne correspond pas à la structure de la classe.
J'ai essayé de générer automatiquement la classe à l'aide de la commande xsd, mais elle a créé des classes séparées pour chacun des membres de données.
J'ai essayé de donner des noms d'élément comme XmlElement ("Employer.Value"), XmlElement ("Template.Employer.Value") mais cela n'a pas fonctionné non plus.
Quelqu'un peut-il suggérer un moyen d'adapter ce fichier XML dans une classe EmployerInfo
?
Merci à l'avance
Avons-nous besoin de spécifier l'attribut XmlRoot() au-dessus de la ligne EmployerInfo de classe publique? – Shekhar
@Shekhar - J'ai mis à jour l'exemple pour travailler pleinement –