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

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

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

Создаю вот такой вот класс.
[Serializable]
    public class ECU:IXmlSerializable
    {
        
        public string SourceByte {
            get { return Convert.ToString(_sourceByte, 16); }
            set { _sourceByte = byte.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier); }
        }
        
        public string TargetByte {
            get { return Convert.ToString(_targetByte, 16); }
            set { _targetByte = byte.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier); }
        }
        [NonSerialized]
        protected byte _targetByte = 0x00;
        protected byte _sourceByte = 0x00;

        public ECU()
        {
 
        }
 
        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }
 
        public void ReadXml(XmlReader reader)
        {
            XmlSerializer xml = new XmlSerializer(typeof(ECU));
            xml.Deserialize(reader);
        }
 
        public void WriteXml(XmlWriter writer)
        {
            XmlSerializer xml = new XmlSerializer(typeof(ECU));
            xml.Serialize(writer, this);
            writer.Close();
        }
    }
Потом в теле программы вызываю
XmlWriter xml = XmlWriter.Create(FileName);
            ecu.WriteXml(xml);
И пошло движение. Только это движение заканчивается ошибкой переполнения стека. Файл, в который сериализуется класс, создается, но там 0 байт. На отладке метод WriteXml начинает работать циклом. Почему - не знаю.

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

textual
Листинг программы
           //атрибуты не нужны т.к. все пишется ручками
           protected byte _targetByte = 0x00;
           protected byte _sourceByte = 0x11;
 
            public void ReadXml(XmlReader reader)
            {
                reader.MoveToAttribute("targetByte");
                if(reader.HasValue) _targetByte = byte.Parse(reader.Value);
                reader.MoveToAttribute("sourceByte");
                if (reader.HasValue) _sourceByte = byte.Parse(reader.Value);
            }
 
            public void WriteXml(XmlWriter writer)
            {
                writer.WriteAttributeString("targetByte", _targetByte.ToString());
                writer.WriteAttributeString("sourceByte", _sourceByte.ToString());
            }
 
            public static void WriteReadTest()
            {
                  var fs = new MemoryStream();            
                  new XmlSerializer(typeof(ECU)).Serialize(fs, new ECU());
                  fs.Position = 0;
                  var ecu = new XmlSerializer(typeof (ECU)).Deserialize(fs);
            }

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


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

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

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