XmlSerializer property converter
Treat the node as a custom type:
[XmlRoot("ObjectSummary")]
public class Summary
{
public string Name {get;set;}
public BoolYN IsValid {get;set;}
}
Then implement IXmlSerializable
on the custom type:
public class BoolYN : IXmlSerializable
{
public bool Value { get; set }
#region IXmlSerializable members
public System.Xml.Schema.XmlSchema GetSchema() {
return null;
}
public void ReadXml(System.Xml.XmlReader reader) {
string str = reader.ReadString();
reader.ReadEndElement();
switch (str) {
case "Y":
this.Value = true;
break;
case "N":
this.Value = false;
break;
}
}
public void WriteXml(System.Xml.XmlWriter writer) {
string str = this.Value ? "Y" : "N";
writer.WriteString(str);
writer.WriteEndElement();
}
#endregion
}
You can even make that custom class a struct
instead, and provide implicit conversions between it and bool
to make it even more "transparent".
The way I do it - which is suboptimal but have not found a better way - is to define two properties:
[XmlRoot("ObjectSummary")]
public class Summary
{
public string Name {get;set;}
[XmlIgnore]
public bool IsValid {get;set;}
[XmlElement("IsValid")]
public string IsValidXml {get{ ...};set{...};}
}
Replace ... with the simple code to read and write the IsValid value to Y and N and read from it.