2009-11-18 109 views
5

我有一個問題想deserialise這個XML:如何將XML元素反序列化爲具有C#屬性和文本的元素數組?

<?xml version="1.0" encoding="UTF-8"?> 
<links> 
    <link title="ABC">http://abc.co.uk</link> 
    <link title="eBay">http://ebay.co.uk</link> 
    <link title="Best Damn Site on the Web">http://stackoverflow.com</link> 
</links> 

使用代碼:

[XmlRoot("links")] 
public class LinksInterface 
{ 
    [XmlElement("link")] 
    public List<LinkElement> Links; 

    public class LinkElement 
    { 
     [XmlAttribute("title")] 
     public string Title; 
     [XmlText] // This bit is the troublesome bit! 
     public LinkElement Link; 
    } 
} 

基本上,我需要把元素的文本內容爲Links.Link,但我的屬性嘗試[XmlText]不提供我期望的行爲,我得到的錯誤:

反映字段「鏈接」時出現錯誤。

如果有人能指出我的方式錯誤,我將不勝感激!

謝謝。

回答

5

或許只是使用string

[XmlText] 
public string Link {get;set;} 

目前的類是遞歸(樹) - 我不認爲這是你的原意。

(我也切換到一個屬性,但是這是沒有問題的 - string是大問題;但也有很多理由使用性質的,而不是場,並帶有自動屬性(C#3.0)有很少有藉口不去)


編輯:另外,試着看看最內在的例外;在這種情況下,該消息是:

Cannot serialize member 'Link' of type LinksInterface.LinkElement. XmlAttribute/XmlText cannot be used to encode complex types.

這給出了問題的所在;-p

+0

Doh!很好的發現馬克:) – Ryall 2009-11-18 11:04:36

+0

也改爲屬性而不是字段。感謝您的建議。 – Ryall 2009-11-18 11:07:49

+0

忽略-1 ...錯誤地點擊了向下的箭頭,不會讓我重新啓動它......對不起:S – Ryall 2009-11-18 11:19:43

0

看看這篇文章XML Serialization in C#一個合理的指示。作者使用getter/setter將項目添加到集合(文章中的數組)並將屬性[XmlElement("link")]應用於getter/setter。

乾杯。

相關問題