2014-12-03 27 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

回答

相关问题