XML 序列化类型转换器

本文关键字:转换器 类型转换 类型 序列化 XML | 更新日期: 2023-09-27 18:35:30

在Json中,我可以这样做:

 [JsonProperty("type")]
 [JsonConverter(typeof(MyTpeConverter))]
 public BoxType myType { get; set; }

 .....
 public class BoxTypeEnumConverter : JsonConverter
 {
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
     ....
    }
 }

这在使用 XML 时是否也可能?

[XmlElement("isFolder")]
[XmlConvert()] // ???
public string IsFolder { get; set; }

我的 XML 文件有例如

....
<isFolder>t</isFolder>
....

我希望"t"是"真的"。

XML 序列化类型转换器

Threre有两种方式:简单方法::)

[XmlElement("isFolder")]
public string IsFolderStr { get; set; }
[XmlIgnore]
public bool IsFolder { get{ ... conversion logic from IsFolderStr is here... }}

第二种方法是创建一个处理自定义转换的类:

public class BoolHolder : IXmlSerializable
{
    public bool Value { get; set }
    public System.Xml.Schema.XmlSchema GetSchema() {
        return null;
    }
    public void ReadXml(System.Xml.XmlReader reader) {
        string str = reader.ReadString();
        reader.ReadEndElement();
        switch (str) {
            case "t":
                this.Value = true;
    ...
    }
}

并将属性的定义替换为 BoolHolder:

public BoolHolder IsFolder {get;set;}