如何在C#中将XML元素反序列化为具有属性和文本的元素数组?

时间:2009-11-18 10:49:57

标签: c# xml serialization xml-serialization

我在尝试反序列化这个XML时遇到了问题:

<?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]的属性不提供我期望的行为,我得到错误:

反映字段“链接”时出错。

如果有人能够指出我的方式错误,我将非常感激!

感谢。

2 个答案:

答案 0 :(得分:5)

也许只使用string

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

目前这个课程是递归的(一棵树) - 我认为这不是你想要的。

(我也切换到了一个属性,但这不是问题 - string是大问题;但是有很多的理由来使用属性而不是字段,并且自动属性(C#3.0)没有什么理由不去)


编辑:同样,尝试查看最内层的异常;在这种情况下,消息是:

  

无法序列化类型为LinksInterface.LinkElement的成员'Link'。 XmlAttribute / XmlText不能用于编码复杂类型。

这可以合理地指出问题所在;; p

答案 1 :(得分:0)

查看这篇文章XML Serialization in C#。作者使用getter / setter将项添加到集合(文章中的数组),并将属性[XmlElement("link")]应用于getter / setter。

干杯。