C#XML反序列化问题

C#XML反序列化问题,c#,xml,deserialization,C#,Xml,Deserialization,要反序列化的XML: <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <changes next="296"> <change> <objectid>E702C43C-E04B-450B-BEBC-76646AB299C5</objectid> <

要反序列化的XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<changes next="296">
    <change>
        <objectid>E702C43C-E04B-450B-BEBC-76646AB299C5</objectid>
        <parentid>ED98C97F-A202-48ED-AEEA-34362508A30B</parentid>
        <objecttype>file</objecttype>
        <listentype>remove</listentype>
    </change>
    <change>
        <objectid>3A242975-CEF0-432B-A997-B33D85C138C8</objectid>
        <parentid>ED98C97F-A202-48ED-AEEA-34362508A30B</parentid>
        <objecttype>file</objecttype>
        <listentype>add</listentype>
    </change>
</changes>
但是我得到了这个代码的错误;我还尝试了几件事,例如,用
[xmlement(“Changes”)]
标记
changeelistener
类的
Changes
属性,而不是将类标记为xmlroot,但它也不起作用


请建议解决此问题的好方法。

尝试将objectid和parentid的类型从Guid更改为字符串。
如果仍然出现错误,请共享错误详细信息。

上述XML的类应如下所示

[XmlRoot(ElementName="change")]
    public class Change {
        [XmlElement(ElementName="objectid")]
        public string Objectid { get; set; }
        [XmlElement(ElementName="parentid")]
        public string Parentid { get; set; }
        [XmlElement(ElementName="objecttype")]
        public string Objecttype { get; set; }
        [XmlElement(ElementName="listentype")]
        public string Listentype { get; set; }
    }

    [XmlRoot(ElementName="changes")]
    public class Changes {
        [XmlElement(ElementName="change")]
        public List<Change> Change { get; set; }
        [XmlAttribute(AttributeName="next")]
        public string Next { get; set; }
    }
[XmlRoot(ElementName=“change”)]
公共阶级变革{
[xmlement(ElementName=“objectid”)]
公共字符串Objectid{get;set;}
[XmlElement(ElementName=“parentid”)]
公共字符串Parentid{get;set;}
[XmlElement(ElementName=“objecttype”)]
公共字符串对象类型{get;set;}
[XmlElement(ElementName=“listentype”)]
公共字符串Listentype{get;set;}
}
[XmlRoot(ElementName=“changes”)]
公共阶级变革{
[xmlement(ElementName=“change”)]
公共列表更改{get;set;}
[XmlAttribute(AttributeName=“next”)]
公共字符串Next{get;set;}
}

问题在于ChangeListener中的更改列表混淆了序列化程序,因为XML中没有所谓的“更改”

我们需要做的唯一更改是使用
[xmlement(“更改”)]
注释更改声明,如下所示:

[XmlRoot("changes")]
public class ChangeListener
{
    [XmlElement("change")]
    public List<Change> Changes { get; set; }
}
[XmlRoot(“更改”)]
公共类ChangeListener
{
[XmlElement(“变更”)]
公共列表更改{get;set;}
}

然后显示的XML将正确反序列化。

“我有错误”-但您没有告诉我们错误是什么。请编辑您的问题并添加详细信息。如果您进行了更改,请具体说明更改,并将特定错误与您尝试的代码版本进行匹配。这是一个未格式化的异常,但rich-n提供的一个答案在我的情况下运行良好。我认为这是可行的,但我们不需要将GUID更改为字符串,对吗?它还可以使用Guid。Guid没有问题。下面由rich-n提供的答案运行良好。
[XmlRoot(ElementName="change")]
    public class Change {
        [XmlElement(ElementName="objectid")]
        public string Objectid { get; set; }
        [XmlElement(ElementName="parentid")]
        public string Parentid { get; set; }
        [XmlElement(ElementName="objecttype")]
        public string Objecttype { get; set; }
        [XmlElement(ElementName="listentype")]
        public string Listentype { get; set; }
    }

    [XmlRoot(ElementName="changes")]
    public class Changes {
        [XmlElement(ElementName="change")]
        public List<Change> Change { get; set; }
        [XmlAttribute(AttributeName="next")]
        public string Next { get; set; }
    }
[XmlRoot("changes")]
public class ChangeListener
{
    [XmlElement("change")]
    public List<Change> Changes { get; set; }
}