I have the following XML data:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data-set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<record>
<LevelNum>0</LevelNum>
<LevelName>Level 0</LevelName>
<MaxBubbles>40</MaxBubbles>
<MaxVisibleBubbles>30</MaxVisibleBubbles>
<StartingPointValue>11</StartingPointValue>
<MaxLevelTime>78</MaxLevelTime>
<LevelPassScore>3000</LevelPassScore>
<TapsToPopStandard>1</TapsToPopStandard>
<InitialVisibleBubbles>9</InitialVisibleBubbles>
<LevelDescription>Level 80</LevelDescription>
<SeqLinear>1</SeqLinear>
<SeqEven>0</SeqEven>
<SeqOdd>0</SeqOdd>
<SeqTriangular>0</SeqTriangular>
<SeqSquare>0</SeqSquare>
<SeqLazy>0</SeqLazy>
<SeqFibonacci>0</SeqFibonacci>
<SeqPrime>0</SeqPrime>
<SeqDouble>0</SeqDouble>
<SeqTriple>0</SeqTriple>
<SeqPi>0</SeqPi>
<SeqRecaman>0</SeqRecaman>
</record>
</data-set>
I am currently reading this data with the following:
//---------------------------------------------------------------------------------------------------------
// ReadLevels
//---------------------------------------------------------------------------------------------------------
// Reads the contents of the levelInfo.xml file and builds a list of level objects with the data in the
// xml file. Allows for easy changing of level setup and addint new levels
//---------------------------------------------------------------------------------------------------------
public List<Level> ReadLevels(XDocument levelInfo)
{
levelInfo = XDocument.Load ("./levelinfo.xml");
List<Level> lvl = (from level in levelInfo.Root.Descendants ("record") // "record" has to match the record level identifier in the xml file
select new Level {
LevelNum = int.Parse (level.Element ("LevelNum").Value),
LevelName = level.Element ("LevelName").Value,
MaxBubbles = int.Parse (level.Element ("MaxBubbles").Value),
MaxVisibleBubbles = int.Parse (level.Element ("MaxVisibleBubbles").Value),
StartingPointValue = int.Parse (level.Element ("StartingPointValue").Value),
MaxLevelTime = int.Parse (level.Element ("MaxLevelTime").Value),
LevelPassScore = int.Parse (level.Element ("LevelPassScore").Value),
TapsToPopStandard = int.Parse (level.Element ("TapsToPopStandard").Value),
InitialVisibleBubbles = int.Parse (level.Element ("InitialVisibleBubbles").Value),
LevelDescription = level.Element ("LevelDescription").Value,
SeqLinear = (bool)level.Element ("SeqLinear"),
SeqEven = (bool)level.Element ("SeqEven"),
SeqOdd = (bool)level.Element ("SeqOdd"),
SeqTriangular = (bool)level.Element ("SeqTriangular"),
SeqSquare = (bool)level.Element ("SeqSquare"),
SeqLazy = (bool)level.Element ("SeqLazy"),
SeqFibonacci = (bool)level.Element ("SeqFibonacci"),
SeqPrime = (bool)level.Element ("SeqPrime"),
SeqDouble = (bool)level.Element ("SeqDouble"),
SeqTriple = (bool)level.Element ("SeqTriple"),
SeqPi = (bool)level.Element ("SeqPi"),
SeqRecaman = (bool)level.Element ("SeqRecaman")
}).ToList ();
return lvl;
}
My current data structure for the level data looks like this:
public class Level
{
public int LevelNum { get; set; }
public string LevelName { get; set; }
public int MaxBubbles { get; set; }
public int MaxVisibleBubbles { get; set; }
public int StartingPointValue { get; set; }
public int MaxLevelTime { get; set; }
public int LevelPassScore { get; set; }
public int TapsToPopStandard { get; set; }
public int InitialVisibleBubbles { get; set; }
public string LevelDescription { get; set; }
public bool SeqLinear { get; set; }
public bool SeqEven { get; set; }
public bool SeqOdd { get; set; }
public bool SeqTriangular { get; set; }
public bool SeqSquare { get; set; }
public bool SeqLazy { get; set; }
public bool SeqFibonacci { get; set; }
public bool SeqPrime { get; set; }
public bool SeqDouble { get; set; }
public bool SeqTriple { get; set; }
public bool SeqPi { get; set; }
public bool SeqRecaman { get; set; }
public Level ()
{
}
}
I'm thinking that there is a better way to handle the list of boolean flag properties. Rather than have them all listed and set each one individually, it would probably be better to store these in a list or dictionary.
My problem is I don't know how I would deserialize the XML data to do that. I'm already creating a list of level objects, but I don't know how I would create the 'list within a list' the right way.
Is is possible to create another list with the list I'm already creating using nested linq statements or is there another way I should be doing this?