【问题标题】:How can I deserialise an XML element into an array of elements with both attributes and text in C#?如何在 C# 中将 XML 元素反序列化为具有属性和文本的元素数组?
【发布时间】:2009-11-18 10:49:56
【问题描述】:

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

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

如果有人能指出我的方法的错误,我将不胜感激!

谢谢。

【问题讨论】:

    标签: c# xml serialization xml-serialization


    【解决方案1】:

    也许只用string:

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

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

    (我也切换到一个属性,但这不是问题 - string 是大问题;但是有 很多 原因使用属性而不是字段,并且使用自动属性(C# 3.0)有几个借口不这样做)


    编辑:另外,尝试查看最里面的异常;在这种情况下,消息是:

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

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

    【讨论】:

    • 也改为属性而不是字段。感谢您的建议。
    • 忽略 -1... 错误地点击了向下箭头,不会让我重新上去... 抱歉 :S
    【解决方案2】:

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

    干杯。

    【讨论】:

      猜你喜欢
      • 2017-11-07
      • 2021-12-13
      • 2012-05-09
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      相关资源
      最近更新 更多