2013-05-11 43 views
0

我试图反序列化一些由某些API提供的XML。然而,这个API是愚蠢的,例如,布尔是不正确的,但真实。并且具有元件用C#自定义解串器来读取XML

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

,然后匹配的XML:

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

是不行的,因为真正的不是布尔的有效表示(该API是用Python编写的,这一点,我认为,更宽容)。

有什么办法可以在我的房产Foo上投入一些属性来对系统说:当你遇到这个元素时,把它通过这个转换器类?

编辑: XML很大,其中大部分是愚蠢的,而不是直接可转换的对象,如234KB,我需要解析的确切值。

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

+0

是结构复杂,以至于你真的需要使用内置的XML序列化?你能用手做吗? LINQ to XML通常使这非常简单。 – 2013-05-11 17:44:59

+0

在python中,true是区分大小写的,必须大写。 – Senjai 2013-05-11 17:46:39

+0

@Jon好点,但我不知道是否有可能的方式我想要它而不使用自定义类型(而不是bool)。我在编写自定义转换器类时没有问题。 – Snake 2013-05-11 17:52:59

回答

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

是的,这是可能的,但我正在尽可能地尽可能地减少管道。 – Snake 2013-05-11 18:45:48