我有下面的類:不正確的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);
}
請幫我弄清楚是怎麼回事。
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-12-04 00:00:13
在ctor中你使用屬性PortSpecified在哪裏def它?我只看到FtpPortSpecified – 2014-12-04 00:02:42
修正了它。我創建問題時複製粘貼錯誤。 – user181218 2014-12-04 00:12:02