Очень полезная функция для этой задачи: Инициализаторы объектов и коллекций , появившиеся после C # 3.0.
Итак, вот как можно использовать инициализаторы объектов и коллекций (обратите внимание, чтоЯ использую PascalCase для свойств вместо camelCase ):
public static void Test()
{
UnitCategory troopsCategory = new UnitCategory
{
UnitCategoryName = "Troops",
UnitType = new List<UnitType>
{
new UnitType
{
UnitTypeName = "Infantry",
Unit = new List<Unit>
{
new Unit
{
Armour = "Chitin",
Attacks = "3",
BallisticSkill = "100",
Compsition = "20",
DedicatedTransport = "No",
Initiative = "3",
Leadership = "5",
Options = "8",
SaveThrow = "6+",
SpecialRules = "None",
Strength = "3",
T = "4",
UnitName = "Hornmagant",
Weapons = "Many",
WeaponSkill = "3",
Wounds = "1"
}
}
}
}
};
Army army = new Army
{
ArmyName = "Tyranid",
UnitCategory = new List<UnitCategory>
{
troopsCategory
}
};
ArmyListing armyListing = new ArmyListing
{
Army = new List<Army>
{
army
}
};
armyListing.SerializeToXml(armyListing);
}
Кстати, оператор using
лучше, чем ручное закрытие:
public void SerializeToXml(ArmyListing armyListing)
{
try
{
var serializer = new XmlSerializer(typeof (ArmyListing));
using (var textWriter = new StreamWriter(@"C:\Test\40k.xml"))
{
serializer.Serialize(textWriter, armyListing);
}
}
catch (Exception ex)
{
}
}