Как я могу десериализовать элемент XML в массив элементов с атрибутами и текстом в C #? - PullRequest
5 голосов
/ 18 ноября 2009

У меня возникла проблема при попытке десериализации этого 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 ]

5 голосов
/ 18 ноября 2009

Возможно, просто используйте string:

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

На данный момент класс рекурсивен (дерево) - я не думаю, что это то, что вы хотели.

(Я также переключился на свойство, но это не проблема - string - важная персона; но есть много причин использовать свойства вместо полей и с автоматическими свойствами (C # 3.0) есть несколько оправданий, чтобы не делать)


Редактировать: также попробуйте взглянуть на самое внутреннее исключение; в этом случае сообщение:

Невозможно сериализовать элемент 'Link' типа LinksInterface.LinkElement. XmlAttribute / XmlText нельзя использовать для кодирования сложных типов.

Это дает разумное представление о том, где проблема; -p

0 голосов
/ 18 ноября 2009

Ознакомьтесь с этой статьей Сериализация XML в C # . Автор использует метод получения / установки для добавления элементов в коллекцию (массив в статье) и применяет атрибут [XmlElement("link")] для метода получения / установки.

Приветствие.

...