2016-04-08 27 views
0

我想從xml字符串反序列化到對象。但是我的觀點永遠是空的。我有一個抽象類(Response),一個繼承自「Response」(DirectorSearchResponse)的類,以及類「DirectorSearchResponse」(HeaderResponse)中的一個對象。該對象在反序列化後總是爲空。XML反序列化不適用於抽象類

Response.cs

public abstract class Response 
{ 
    public HeaderResponse Header { get; set; } 

    public Response() 
    { 
    } 
} 

DirectorSearchResponse.cs

[XmlRoot("xmlresponse")] 
public class DirectorSearchResponse : Response 
{ 
    public DirectorSearchResponse() : base() 
    { 
     /* DO NOTHING */ 
    } 
} 

HeaderResponse.cs

[XmlRoot("header")] 
public class HeaderResponse 
{ 
    [XmlElement("toto")] 
    public String toto { get; set; } 

    public HeaderResponse() 
    { 

    } 
} 

我運行代碼:

 /* DESERIALIZE */ 
     String toto = "<xmlresponse><header><toto>tutu</toto><reportinformation><time>08/04/2016 13:33:37</time><reporttype> Error</reporttype><country>FR</country><version>1.0</version><provider>www.creditsafe.fr</provider><chargereference></chargereference></reportinformation></header><body><errors><errordetail><code>110</code><desc></desc></errordetail></errors></body></xmlresponse>"; 
     XmlSerializer xsOut = new XmlSerializer(typeof(DirectorSearchResponse)); 
     using (TextReader srr = new StringReader(toto)) 
     { 
      DirectorSearchResponse titi = (DirectorSearchResponse)xsOut.Deserialize(srr); 
     } 

當我執行我的代碼時,對象「titi」是instanciate,但「Header」始終爲空。

如何從xml中檢索「toto」值?

回答

1

XML是大小寫敏感的,所以你需要使用[XmlElement("header")]告知正確的元素名稱的序列化的Header屬性:

public abstract class Response 
{ 
    [XmlElement("header")] 
    public HeaderResponse Header { get; set; } 

    public Response() 
    { 
    } 
} 

您應用於HeaderResponse[XmlRoot("header")]僅在它是XML文檔的根元素時控制其元素名稱。

+0

它的工作原理。謝謝。 – BaptX

0

您需要的鏈接添加到抽象類是這樣的:

[XmlRoot(ElementName = "Response")] 
public abstract class Response 
{ 
    public HeaderResponse Header { get; set; } 

    public Response() 
    { 
    } 
} 

[XmlRoot(ElementName = "Response")] 
public class DirectorSearchResponse : Response 
{ 
    public DirectorSearchResponse() : base() 
    { 
    /* DO NOTHING */ 
    } 
} 
+0

XmlRoot是確定xml的根節點的權利? – BaptX

+0

[Xml根屬性](https://msdn.microsoft.com/fr-fr/library/system.xml.serialization.xmlrootattribute%28v=vs.110%29.aspx) – Kypaz