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

5

我在尝试反序列化这个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]没有提供我期望的行为,而且我得到了错误:

反映字段'Links'时发生错误。

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

谢谢。

2个回答

5
也许只需使用 string
[XmlText]
public string Link {get;set;}

目前这个类是递归的(一棵树)- 我认为这不是你想要的。
(我也切换到了属性,但那不是问题 - string 是最大的问题;但有很多使用属性而不是字段的理由,并且使用自动属性(C#3.0),几乎没有借口不使用)
编辑:还要尝试查看最内部的异常;在这种情况下,消息是:
“无法序列化类型为LinksInterface.LinkElement的Link成员。 XmlAttribute / XmlText不能用于编码复杂类型。”
这给出了一个合理的指示,表明问题在哪里 ;-p”

也更改为属性而不是字段。谢谢建议。 - Ryall
抱歉,我误点了向下箭头,不让我重新点赞...对不起 :S - Ryall

0

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

干杯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接