ASMX WebService возвращает XmlNode вместо пользовательского объекта

Вот веб-сервис:

Пользовательские классы:

public class A
{
    public A()
    {
    }
    public B prop { get; set; } 
}

public class B
{
    public B()
    {
    }
    public A prop { get; set; }
}

Веб-метод:

[WebMethod]
[XmlInclude(typeof(A))]
public object Test()
{
    A a = new A();
    a.prop = new B();

    return a;
}

Вот клиентская сторона:

Service ws = new Service();
var response = ws.Test();

Итак, почему веб-сервис возвращает список XmlNode вместо класса A? Как это решить?

PS: если я прокомментирую public A prop { get; set; } строку, это сработает


person mtanksl    schedule 21.12.2011    source источник
comment
К вашему сведению, атрибут [Serializable] не используется сериализацией XML.   -  person John Saunders    schedule 26.03.2012
comment
Ладно, удалил. Любые идеи, как решить эту проблему сериализации цикла?   -  person mtanksl    schedule 04.04.2012
comment
Нет проблем. Вы сказали ему вернуть object, поэтому он возвращает наиболее общий возможный тип. Если вы не имели в виду object, не возвращайте object.   -  person John Saunders    schedule 04.04.2012
comment
Главное здесь в том, что если я прокомментирую public A prop { get; set; }, он вернет A, как и ожидалось. Как этого добиться без комментирования строки кода?   -  person mtanksl    schedule 06.04.2012


Ответы (1)


Ок, нашел решение:

Я мог бы использовать обертку, например:

Или я использую атрибут [return:], например:

[WebMethod]
[return: XmlElement(typeof(A))]
public object Test()
{
    A a = new A();
    a.prop = new B();

    return a;
}

О целях атрибутов:

person mtanksl    schedule 18.07.2012