2014-12-03 32 views
0

我有下面的類:不正確的XML序列化

public class FtpDefinition 
{ 
    public FtpDefinition() 
    { 
     Id = Guid.NewGuid(); 
     FtpServerAddress = string.Empty; 
     FtpPortSpecified = false; 
     FtpPort = "21"; 
    } 

    [System.Xml.Serialization.XmlElement("Id")] 
    public System.Guid Id { get; set; } 

    [System.Xml.Serialization.XmlElement("FtpServerAddress")] 
    public string FtpServerAddress { get; set; } 

    [System.Xml.Serialization.XmlElement("FtpPortSpecified")] 
    public bool FtpPortSpecified { get; set; } 

    [System.Xml.Serialization.XmlElement("FtpPort")] 
    public string FtpPort { get; set; } 
} 

我有獲取以下XML字符串的方法,以及使用.NET XML序列化能力 反序列化成型FtpDefinition的對象。

<FTPDefinition> 
    <Id>a0a940a7-6785-41be-ac3a-75ba5d4c13ee</Id> 
    <FtpServerAddress>ftp.noname.com</FtpServerAddress> 
    <FtpPortSpecified>false</FtpPortSpecified> 
    <FtpPort>21</FtpPort> 
</FTPDefinition> 

的問題是,雖然Id和FtpServerAddress領域得到正確填充,FtpPort得到 填充了一個空字符串,而更重要的是奇怪的是,FtpPortSpecified獲取與布爾值TRUE代替FALSE填充。

我用上面的代碼中的自動屬性替換爲實際返回值... ... = value舊樣式getter \ setter,這樣我就可以捕捉到setter被擊中了。我懷疑有一些用戶代碼設置值,但事實並非如此。在調用堆棧中,它清楚地表明.net反序列化代碼正在調用值爲TRUE的setter,但也可以看到,作爲反序列化方法的參數提供的XML字符串具有正確的值(FALSE)。

反序列化的代碼很簡單:

XmlSerializer xs = ...(objectType); 

using (StringReader stringReader = new StringReader(xml)) 
{ 
    return xs.Deserialize(stringReader); 
} 

請幫我弄清楚是怎麼回事。

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-12-04 00:00:13

+0

在ctor中你使用屬性PortSpecified在哪裏def它?我只看到FtpPortSpecified – 2014-12-04 00:02:42

+0

修正了它。我創建問題時複製粘貼錯誤。 – user181218 2014-12-04 00:12:02

回答

相關問題