代码之家  ›  专栏  ›  技术社区  ›  Ryall

如何将XML元素反序列化为同时具有属性和文本的元素数组?

  •  5
  • Ryall  · 技术社区  · 16 年前

    尝试反序列化此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 回复  |  直到 16 年前
        1
  •  5
  •   Marc Gravell    16 年前

    也许只是使用 string :

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

    现在这个类是递归的(树),我认为这不是您想要的。

    (我也换了房子,但这不是问题所在- 一串 是最重要的;但是 太多了 使用属性而不是字段的原因,以及使用自动属性(C 3.0)时,很少有理由不使用)


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

    无法序列化LinkSinterface.LinkElement类型的成员“Link”。xmltattribute/xmltext不能用于对复杂类型进行编码。

    这给出了问题所在的合理指示;-p

        2
  •  0
  •   tranmq    16 年前

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

    干杯。