Class XmlSerializer и "вложенность" полей - C#
Формулировка задачи:
Здравствуйте, друзья.
Не составило особого труда, при помощи данного форума, поверхностно разобраться как работает класс XmlSerializer.
Если речь идет об "одноуровневой" вложенности эл-тов:
Но я пытаюсь (уже третий вечер пытаюсь ) получить вот такого вида документ:
Вот мой код:
Заранее благодарю!
<?xml version="1.0" encoding="UTF-8"?> -<SerializableData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> -<Cont> -<Chel> <FirstName>Petr</FirstName> <SecName>Petrov</SecName> <Address>Petersb</Address> </Chel> -<Chel> <FirstName>Nik</FirstName> <SecName>Nikol</SecName> <Address>Nikolaev</Address> </Chel> </Cont> </SerializableData>
<?xml version="1.0" encoding="UTF-8"?> -<SerializableData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> -<Cont> -<Chel> <Name> <FirstName>Petr</FirstName> <SecName>Petrov</SecName> </Name> <Address>S.Petersburg</Address> </Chel> -<Chel> <Name> <FirstName>Kostya</FirstName> <SecName>Kostrov</SecName> </Name> <Address>Kostroma</Address> </Chel> </Cont> </SerializableData>
namespace Seriliaz { public class Name { private string firstName; private string secName; [XmlElement] public string FirstName { get { return firstName; } set { firstName = value; } } [XmlElement] public string SecName { get { return secName; } set { secName = value; } } public Name (){} public Name (string f, string s) { firstName = f; secName = s; } } public class Chel : Name { private string address; [XmlElement] public string Address { get { return address; } set { address = value; } } public Chel() { } public Chel (string n, string s, string a) : base (n, s) { address = a; } } public class SerializableData { private ArrayList Content = new ArrayList(); [XmlArray] [XmlArrayItem(typeof(Chel))] public IList Cont { get { return Content; } } public SerializableData() { } } class Program { static void Main(string[] args) { SerializableData sd = new SerializableData(); for (int i = 0; i < sd.Cont.Count + 1; ++i) { Console.WriteLine("Enter the name:"); string name = Console.ReadLine(); if (name.Equals("q") || name.Equals("й")) break; else { Console.WriteLine("Enter the surname:"); string sName = Console.ReadLine(); Console.WriteLine("Enter the address:"); string add = Console.ReadLine(); sd.Cont.Add(new Chel(name, sName, add)); } } try { XmlWriter writer = new XmlTextWriter("XmlFile.xml", Encoding.UTF8); XmlSerializer serial = new XmlSerializer(typeof(SerializableData)); serial.Serialize(writer, sd); writer.Close(); Console.WriteLine("'1' ОК"); } catch(Exception) { Console.WriteLine("'1' You have a mistake!"); } SerializableData sd1 = new SerializableData(); try { XmlReader reader = new XmlTextReader("XmlFile.xml"); XmlSerializer serial = new XmlSerializer(typeof(SerializableData)); sd1 = (SerializableData)serial.Deserialize(reader); reader.Close(); Console.WriteLine("'2' OK"); } catch (Exception) { Console.WriteLine("'2' You have a mistake!"); } foreach (Chel ch in sd1.Cont) { Console.WriteLine("Name - {0}, S.Name - {1}, Address - {2}", ch.FirstName, ch.SecName, ch.Address); } } } }
Решение задачи: «Class XmlSerializer и "вложенность" полей»
textual
Листинг программы
<?xml version="1.0" encoding="UTF-8"?> -<SerializableData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> -<Cont> -<Chel> -<name> <FirstName>Sasha</FirstName> <SecName>Dabizha</SecName> </name> <Address>Odessa</Address> </Chel> -<Chel> -<name> <FirstName>Petya</FirstName> <SecName>Petrov</SecName> </name> <Address>Piter</Address> </Chel> </Cont> </SerializableData>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д