我正在尝试使用XmlSerializer反序列化XML文件。但是我得到了这个异常:XML文档中存在错误(1,41).InnerException消息“不期望复制地址xmlns ='DistributionServices'。”
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; }
}
请让我知道我做错了什么。
答案 0 :(得分:2)
您必须在类中声明命名空间,并在属性上将其设置为空。将您的班级模型更改为此,它应该可以正常工作。
[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; }
}
顺便说一句:如果XmlElement
与该属性的名称相同,则无需将其命名为SELECT
MyTableId,
COUNT(*)
FROM
MyTable
GROUP BY
MyTableId
HAVING
COUNT(*) > 1
。