2017-04-25 91 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

它的工作! 谢谢:) –