Не работает XmlSerializer - C#

Узнай цену своей работы

Формулировка задачи:

Создаю вот такой вот класс.
Листинг программы
  1. [Serializable]
  2. public class ECU:IXmlSerializable
  3. {
  4. public string SourceByte {
  5. get { return Convert.ToString(_sourceByte, 16); }
  6. set { _sourceByte = byte.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier); }
  7. }
  8. public string TargetByte {
  9. get { return Convert.ToString(_targetByte, 16); }
  10. set { _targetByte = byte.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier); }
  11. }
  12. [NonSerialized]
  13. protected byte _targetByte = 0x00;
  14. protected byte _sourceByte = 0x00;
  15.  
  16. public ECU()
  17. {
  18. }
  19. public System.Xml.Schema.XmlSchema GetSchema()
  20. {
  21. return null;
  22. }
  23. public void ReadXml(XmlReader reader)
  24. {
  25. XmlSerializer xml = new XmlSerializer(typeof(ECU));
  26. xml.Deserialize(reader);
  27. }
  28. public void WriteXml(XmlWriter writer)
  29. {
  30. XmlSerializer xml = new XmlSerializer(typeof(ECU));
  31. xml.Serialize(writer, this);
  32. writer.Close();
  33. }
  34. }
Потом в теле программы вызываю
Листинг программы
  1. XmlWriter xml = XmlWriter.Create(FileName);
  2. ecu.WriteXml(xml);
И пошло движение. Только это движение заканчивается ошибкой переполнения стека. Файл, в который сериализуется класс, создается, но там 0 байт. На отладке метод WriteXml начинает работать циклом. Почему - не знаю.

Решение задачи: «Не работает XmlSerializer»

textual
Листинг программы
  1.            //атрибуты не нужны т.к. все пишется ручками
  2.            protected byte _targetByte = 0x00;
  3.            protected byte _sourceByte = 0x11;
  4.  
  5.             public void ReadXml(XmlReader reader)
  6.             {
  7.                 reader.MoveToAttribute("targetByte");
  8.                 if(reader.HasValue) _targetByte = byte.Parse(reader.Value);
  9.                 reader.MoveToAttribute("sourceByte");
  10.                 if (reader.HasValue) _sourceByte = byte.Parse(reader.Value);
  11.             }
  12.  
  13.             public void WriteXml(XmlWriter writer)
  14.             {
  15.                 writer.WriteAttributeString("targetByte", _targetByte.ToString());
  16.                 writer.WriteAttributeString("sourceByte", _sourceByte.ToString());
  17.             }
  18.  
  19.             public static void WriteReadTest()
  20.             {
  21.                   var fs = new MemoryStream();            
  22.                   new XmlSerializer(typeof(ECU)).Serialize(fs, new ECU());
  23.                   fs.Position = 0;
  24.                   var ecu = new XmlSerializer(typeof (ECU)).Deserialize(fs);
  25.             }

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


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

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

13   голосов , оценка 4.231 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут