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>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы