反序列化 Xml 文档没有结果

本文关键字:结果 文档 Xml 反序列化 | 更新日期: 2023-09-27 18:33:17

我在反序列化我拥有的 Xml 文档时遇到了一些困难。请参阅下面的文档小完整示例:

<?xml version="1.0" encoding="utf-8" ?>
<MailClient>
<Client Id="Outlook.com">
    <Property Supported="false" Category="Responsive" Name="@media"><![CDATA["@media"]]></Property>
    <Property Supported="false" Category="Selectors" Name="*"><![CDATA["*"]]></Property>
    <Property Supported="false" Category="Selectors" Name="ElementSelector"><![CDATA["E"]]></Property>
    <Property Supported="false" Category="Selectors" Name="[=]"><![CDATA["[=]"]]></Property>
    <Property Supported="false" Category="Selectors" Name="[~=]"><![CDATA["[~=]"]]></Property>
    <Property Supported="false" Category="Selectors" Name="[^=]"><![CDATA["[^=]"]]></Property>
    <Property Supported="false" Category="Selectors" Name="[$=]"><![CDATA["[$=]"]]></Property>
    <Property Supported="false" Category="Selectors" Name="[*=]"><![CDATA["[*=]"]]></Property>
</Client>
</MailClient>

关联的类如下所示:

[Serializable, XmlRoot("Client"), XmlType("Client")]
public class MailClient
{
    [XmlElement("Client")]
    public List<CssRule> CssRules { get; set; }
    public MailClient()
    {
        CssRules = new List<CssRule>();
    }
}
[XmlType("Property")]
public class CssRule
{
    [XmlAttribute("Name")]
    public string Name { get; set; }
    [XmlAttribute("Category")]
    public string Category { get; set; }
    [XmlAttribute("Supported")]
    public bool IsSupported{ get; set; }
    public CssRule(){}
}

反序列化是通过以下方式完成的:

XmlSerializer serializer = new XmlSerializer(typeof(MailClient));
FileStream xmlFile = new FileStream(ConfigFile, FileMode.Open);
MailClient clients = (MailClient)serializer.Deserialize(xmlFile);

我收到了与MailClient元素相关的异常There is an error in XML document (2, 2).{"<MailClient xmlns=''> was not expected."} .所以我传入了一个 xml 根属性:

XmlSerializer serializer = new XmlSerializer(typeof(MailClient), 
new XmlRootAttribute("MailClient"));

这似乎纠正了问题。 clients现在包含一个client但尚未填充任何属性,也就是说categoryname等......都保持空置。

谁能看到我在这里出错的地方?在这一点上,我开始认为对我来说,只使用 Linq to Xml 而不是尝试反序列化它可能会更快

反序列化 Xml 文档没有结果

在你的MailClient类中,你有XmlRoot("Client") .将其更改为实际的根元素名称,特别是XmlRoot("MailClient") .这样,您就不必在代码中使用XmlRootAttribute

对于集合,应使用 XmlArray 和 XmlArrayItem 属性。

在使用XmlType属性的地方,应该使用 XmlElement 属性。