使用自定义反序列化器使用C#读取XML

时间:2013-05-11 17:43:20

标签: c# .net xml deserialization

我正在尝试反序列化某些API提供的XML。然而,这个API是愚蠢的,例如,bool不是真的,而是True。并有一个元素

[XmlElement("Foo")]
public bool Foo { get;set; }

然后是匹配的XML:

<...><Foo>True</Foo></...>

不起作用,因为True不是bool的有效表示(API是用Python编写的,我认为更宽容)。

有没有办法在我的属性Foo上添加一些属性来对系统说:当你遇到这个元素时,把它放到这个转换器类中?

编辑: XML很大,而且大多数都是愚蠢的,而不是直接可转换的对象,比如234KB,我需要将其解析为确切的值。

我是否需要为每个人写一个包装器属性?

1 个答案:

答案 0 :(得分:1)

您可以使用支持属性:

public class MyModel
{
    [XmlIgnore]
    public bool Foo 
    {
        get
        {
            return string.Equals(FooXml, "true", StringComparison.OrdinalIgnoreCase);
        }
        set
        {
            FooXml = value.ToString();
        }
    }

    [XmlElement("Foo")]
    public string FooXml { get; set; }
}