簡體   English   中英

C# XML 反序列化問題

[英]C# XML deserialization issue

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>

使用的數據模型:

[XmlRoot("changes")]
public class ChangeListener
{   
    public List<Change> Changes { get; set; }
}

[XmlRoot("change")]
public class Change
{
    [XmlElement("objectid")]
    public Guid objectid { get; set; }
    [XmlElement("parentid")]
    public Guid parentid { get; set; }
    [XmlElement("objecttype")]
    public string objecttype { get; set; }
    [XmlElement("listentype")]
    public string listentype { get; set; }
}

反序列化代碼,這里的結果是字符串格式的 xml 上面:

(ChangeListener)new XmlSerializer(typeof(ChangeListener)).Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(result)))

但是我收到此代碼的錯誤; 我還嘗試了幾件事,例如用[XmlElement("changes")]標記ChangeListener class 的Changes屬性,而不是將 class 標記為 xmlroot,但它也沒有工作。

請為這個問題提出好的方法。

提到的 XML 的 Class 應如下所示。

[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; }
    }

問題是 ChangeListener 中的更改列表混淆了序列化程序,因為 XML 中沒有任何稱為“更改”的內容。

我們需要做的唯一更改是使用[XmlElement("change")]注釋 Changes 的聲明,如下所示:

[XmlRoot("changes")]
public class ChangeListener
{
    [XmlElement("change")]
    public List<Change> Changes { get; set; }
}

然后顯示的 XML 會正確反序列化。

嘗試將 objectid 和 parentid 的類型從 Guid 更改為字符串。 如果您仍然遇到錯誤,請分享錯誤詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM