TEST1

XML Serialization Array in C #

I am having problems with this, I have an xml sheet that looks like

<root> <list id="1" title="One"> <word>TEST1</word> <word>TEST2</word> <word>TEST3</word> <word>TEST4</word> <word>TEST5</word> <word>TEST6</word> </list> <list id="2" title="Two"> <word>TEST1</word> <word>TEST2</word> <word>TEST3</word> <word>TEST4</word> <word>TEST5</word> <word>TEST6</word> </list> </root> 

And I'm trying to serialize it to

 public class Items { [XmlAttribute("id")] public string ID { get; set; } [XmlAttribute("title")] public string Title { get; set; } //I don't know what to do for this [Xml... something] public list<string> Words { get; set; } } //I don't this this is right either [XmlRoot("root")] public class Lists { [XmlArray("list")] [XmlArrayItem("word")] public List<Items> Get { get; set; } } //Deserialize XML to Lists Class using (Stream s = File.OpenRead("myfile.xml")) { Lists myLists = (Lists) new XmlSerializer(typeof (Lists)).Deserialize(s); } 

I'm really new to XML and XML serialization, any help would be much appreciated

+7
source share
2 answers

It should work if you declare your classes as

 public class Items { [XmlAttribute("id")] public string ID { get; set; } [XmlAttribute("title")] public string Title { get; set; } [XmlElement("word")] public List<string> Words { get; set; } } [XmlRoot("root")] public class Lists { [XmlElement("list")] public List<Items> Get { get; set; } } 
+8
source

If you just need to read your XML in an object structure, it may be easier to use XLINQ.

Define your class as follows:

 public class WordList { public string ID { get; set; } public string Title { get; set; } public List<string> Words { get; set; } } 

And then read the XML:

 XDocument xDocument = XDocument.Load("myfile.xml"); List<WordList> wordLists = ( from listElement in xDocument.Root.Elements("list") select new WordList { ID = listElement.Attribute("id").Value, Title = listElement.Attribute("title").Value, Words = ( from wordElement in listElement.Elements("word") select wordElement.Value ).ToList() } ).ToList(); 
+3
source

All Articles