Не работает XmlSerializer - C#
Формулировка задачи:
Создаю вот такой вот класс.
Потом в теле программы вызываю
И пошло движение. Только это движение заканчивается ошибкой переполнения стека. Файл, в который сериализуется класс, создается, но там 0 байт.
На отладке метод WriteXml начинает работать циклом. Почему - не знаю.
Листинг программы
- [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);
Решение задачи: «Не работает 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д