2017-04-25 118 views
1

我試圖用XmlSerializer反序列化XML文件。然而,我得到這個異常:XML文檔中有錯誤(1,41).InnerException消息「ReplicationStatus xmlns ='DistributionServices'不是預期的。」使用XMLSerializer反序列化XML

XML文件看起來像這樣:

<?xml version="1.0" encoding="UTF-8" ?> 
<ts:Status xmlns:ts="DistributionServices"> 
<Server>DUMMY</Server> 
<Object>DUMMY</Object> 
<Port>123</Port> 
<Code>DUMMY</Code> 
<Key>b0ed5e56</Key> 
</ts:Status> 

,我已經採用的是如下所述的代碼:

MessageData data = new MessageData(); 
XmlSerializer xmlSerializer = new XmlSerializer(data.GetType()); 
data = (MessageData)xmlSerializer.Deserialize(new StringReader(msgData)); 

這裏,MSGDATA是含有上面所示的XML字符串。 MessageData類看起來是這樣的:

[Serializable,XmlType("Status")] 
public class MessageData 
{ 
    [XmlElement("Server")] 
    public string Server { get; set; } 

    [XmlElement("Object")] 
    public string Object { get; set; } 

    [XmlElement("Port")] 
    public string Port { get; set; } 

    [XmlElement("Code")] 
    public string Code { get; set; } 

    [XmlElement("Key")] 
    public string Key { get; set; } 
} 

請讓我知道我做錯了。

回答

1

您必須在您的類中聲明命名空間並將其設置爲在您的屬性上爲空。改變你的班級模型,這應該工作得很好。

[Serializable, XmlRoot("Status", Namespace = "DistributionServices")] 
public class MessageData 
{ 
    [XmlElement(Namespace = "")] 
    public string Server { get; set; } 

    [XmlElement(Namespace = "")] 
    public string Object { get; set; } 

    [XmlElement(Namespace = "")] 
    public string Port { get; set; } 

    [XmlElement(Namespace = "")] 
    public string Code { get; set; } 

    [XmlElement(Namespace = "")] 
    public string Key { get; set; } 
} 

BTW:你沒有命名XmlElement的明確的,如果他們有相同的名稱屬性。

+1

它的工作! 謝謝:) –