2013-05-11 44 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