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

使用C#和自定义反序列化器读取XML,c#,.net,xml,deserialization,C#,.net,Xml,Deserialization,我正在尝试反序列化某个API提供的一段XML。然而这个API是哑的,例如,bool不是真的,而是真的。并且有一个元素 [XmlElement("Foo")] public bool Foo { get;set; } 然后是匹配的XML: <...><Foo>True</Foo></...> True 不起作用,因为True不是bool的有效表示形式(API是用Python编写的,我认为这更容易理解) 有没有办法在我的属性Foo上添加一些属性来

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

[XmlElement("Foo")]
public bool Foo { get;set; }
然后是匹配的XML:

<...><Foo>True</Foo></...>
True
不起作用,因为True不是bool的有效表示形式(API是用Python编写的,我认为这更容易理解)

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

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


是否需要为它们中的每一个编写包装器属性?

您可以使用备份属性:

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; }
}

结构是否足够复杂,以至于您真的需要使用内置的XML序列化?你能手工做吗?LINQ to XML通常使这一点变得非常简单。在python中,true区分大小写,必须大写。@Jon说得好,但我想知道是否有可能不使用自定义类型(而不是bool)而按我所希望的方式使用它。我在编写自定义转换器类方面没有问题。我认为C#可以将“True”解析为bool。。你确定这就是它不起作用的原因吗?是的,这是可能的,但我正在尽可能少地使用管道。