C#web服务...返回嵌套的自定义对象

时间:2009-11-11 13:53:31

标签: c# object web-services return

我已经开始在VS2005中开发新的Web服务。只有一种方法:

[WebMethod]  
[XmlInclude(typeof(Person))]  
public PersonAction GetAction()  
{  
   PersonAction action = new PersonAction();  
   return action;  
}  

其中PersonAction类包含一个引用Person

的字段
[Serializable]  
public class PersonAction    
{  
    private string actionName = "XAction";  
    private Person person1;  
    private Person person2;  

    public PersonAction() 
    {
        this.person = new Person();
        this.person.Name = "P1";
    }

    public string Name
    {
        get
        {
            return this.actionName;
        }
    }
    [XmlElement(Type = typeof(Person))]
    public Person Person1
    {
        get
        {
            return this.person1;
        }
    }
}  

我已经构建了它,运行它...但是wsdl它总是包含PersonAction的空标签...没有可用的嵌入式类型的定义,所以我在客户端总是得到null。

XmlElementXmlInclude[Serializable]显然没效果......

我确信我会错过一些东西 肯定有人在过去遇到过这个问题,并且知道解决方案。我真的很感激VS2005(.NET 2.0)的任何代码都会有所帮助。

谢谢

2 个答案:

答案 0 :(得分:1)

使变量公开的变化似乎解决了这个问题,但事实并非如此。该服务现在序列化公共变量,而不是属性。

尝试将变量更改回私有,并添加“setter”函数。我认为这是序列化所必需的。

答案 1 :(得分:0)

您的Person Action类可能缺少XmlRoot属性。 XmlInclude也可能是不必要的。

编辑添加:

  • 我使用(在我的ASMX / .NET 2.0 Web服务中)XmlRoot并且不使用XmlInclude。
  • 我注意到一件奇怪的事:你的属性只是get-only。我相信惯例是在可序列化类中设置数据保持属性。
  • 您可以尝试的另一件事是获取服务的WSDL,通过WSDL实用程序运行它,查看wsdl.exe如何生成可序列化的类并查看差异 - 这当然是.NET 2.0 / ASMX特定的建议