Reputation: 2411
I have XML document:
<?xml version="1.0" encoding="utf-8" ?>
<Menu>
<MainMenu>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
</MainMenu>
</Menu>
And I whant to deserialize it as list in class MainMenu
:
[Serializable()]
public class MainMenu
{
[System.Xml.Serialization.XmlElementAttribute("Meal")]
private List<string> Meal;
public MainMenu()
{
Meal = new List<string>();
}
}
By method:
private void MenuDeserializer()
{
MainMenu mainMenu = null;
string path = "MenuXML.xml";
XmlSerializer serializer = new XmlSerializer(typeof(MainMenu));
StreamReader reader = new StreamReader(path);
reader.ReadToEnd();
mainMenu = (MainMenu)serializer.Deserialize(reader);
reader.Close();
}
Is this will deserialize all Meal's to my list? and if not than how to do this? When I'm trying to debug I get exception: Error at XML file (0,0), this (0,0) is confusing, where is problem and how to solve it?
Upvotes: 0
Views: 1796
Reputation: 16338
The XML that you shown could be deserialized like this:
[Serializable()]
[System.Xml.Serialization.XmlRoot("Menu")]
public class Menu
{
[XmlArray("MainMenu")]
[XmlArrayItem("Meal", typeof(string))]
public string[] MainMenu { get; set; }
}
public static void Main(string[] args)
{
XmlSerializer serializer = new XmlSerializer(typeof(Menu));
using(StreamReader reader = new StreamReader("MenuXML.xml"))
{
Menu menu = (Menu)serializer.Deserialize(reader);
reader.Close();
}
}
Upvotes: 0
Reputation: 2084
If this is ur XML:
<?xml version="1.0" encoding="utf-8" ?>
<Menu>
<MainMenu>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
</MainMenu>
</Menu>
And I whant to deserialize it as list in class MainMenu:
public class Menu
{
public MainMenu MainMenu{get;set;}
}
public class MainMenu
{
public List<string> Meal {get; set;}
public MainMenu()
{
Meal = new List<string>();
}
}
By method:
private void MenuDeserializer()
{
Menu menu;
string path = "MenuXML.xml";
XmlSerializer serializer = new XmlSerializer(typeof(Menu));
using(StreamReader reader = new StreamReader(path))
{
menu = (Menu)serializer.Deserialize(reader);
}
}
This is how it shud be...
Upvotes: 0
Reputation: 6793
1 - Remove reader.ReadToEnd(), you're moving the stream from the start so when you come to deserialize it tries to start from the end of the file.
2 - You need to remove the outer Menu element from your XML, your class starts at MainMenu so so should your xml...
<?xml version="1.0" encoding="utf-8" ?>
<MainMenu>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
<Meal>Example1</Meal>
</MainMenu>
Upvotes: 1