代码之家  ›  专栏  ›  技术社区  ›  Learner

C Web服务…返回嵌套的自定义对象

  •  1
  • Learner  · 技术社区  · 16 年前

    我已经开始在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它总是包含一个空标记 人格化 …没有嵌入类型的定义可用,因此在客户端总是得到空值。

    XmlElement , XmlInclude , [Serializable] 显然没有效果…

    我肯定我错过了什么。
    当然,过去有人面对这个问题,知道解决办法。我真的很感激任何一段VS2005(.NET 2.0)的代码都会有帮助。

    谢谢你

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jerod Venema    16 年前

    使变量公开的更改似乎可以修复它,但实际上并不是。服务现在正在序列化公共变量,而不是属性。

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

        2
  •  0
  •   azheglov    16 年前

    你可能失踪了 XmlRoot 个人动作类的属性。XML包含也可能是不必要的。

    编辑添加:

    • 我使用(在我的asmx/.net 2.0 Web服务中)xmlRoot,不使用xmlInclude。
    • 我注意到一件奇怪的事情:你的财产只能得到。我相信约定是使可序列化类中的数据保持属性得到设置。
    • 您可以尝试的另一件事是获取服务的WSDL,通过WSDL实用程序运行它,查看wsdl.exe如何生成可序列化类,并查看不同之处-当然,这是一个.NET 2.0/asmx特定的建议。