Как вернуть интерфейс или «сложное» значение, используя веб-сервис? - PullRequest
4 голосов
/ 26 августа 2010

У меня есть веб-сервис, который возвращает комплексное значение (это дерево)

public class DocumentTreeNode
{
    public MyDocument Data
    { get; set;}

    private LinkedList<DocumentTreeNode> _children;

    public IEnumerable<DocumentTreeNode> Children
    {
        get
        {
            return _children.AsEnumerable();
        }
    }

    (...)
}

К сожалению, когда я вызываю веб-сервис, он возвращает

<?xml version="1.0" encoding="utf-8"?>
<DocumentTreeNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns="http://tempuri.org/" />

Я дважды проверил, и объект, который я должен вернуть, не пустой.

Я предполагаю, что это означает, что ASP.Net не может правильно сериализовать мой класс (из-за IEnumerable?). Я собирался использовать сериализацию Xml и заставить мой сервис возвращать XmlDocument, но я не думаю, что это лучший способ.

Какой самый простой способ пропустить этот объект (с минимальными затратами)?

1 Ответ

1 голос
/ 26 августа 2010

Свойства, которые возвращают интерфейсы, пропускаются сериализатором. Для этого требуется конкретный тип, в противном случае повторная гидратация была бы невозможна без отправки дополнительных метаданных типа, что не является частью сериализации OOTB.

...