XmlSerializer property converter

前端 未结 3 804
离开以前
离开以前 2020-12-03 17:57

Suppose we have a class which can be serialized/deserialized by XmlSerializer. It would be like so:

[XmlRoot(\"ObjectSummary\")]
public class Summary
{
              


        
3条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-03 18:20

    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".

提交回复
热议问题