Не работает 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);
}