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

C#web服务。。。返回嵌套的自定义对象,c#,object,web-services,return,C#,Object,Web Services,Return,我在VS2005中开始开发一个新的web服务。只有一种方法: [WebMethod] [XmlInclude(typeof(Person))] public PersonAction GetAction() { PersonAction action = new PersonAction(); return action; } 其中,PersonAction类包含一个字段,该字段引用了Person类 [Serializable] public cla

我在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

xmlement
xmlclude
[Serializable]
显然没有效果

我肯定我错过了什么。
肯定有人曾经遇到过这个问题,并且知道解决办法。我非常感谢VS2005(.NET2.0)的任何一段代码

谢谢

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

编辑以添加:

  • 我使用(在我的ASMX/.net2.0web服务中)XmlRoot,而不使用xmlclude
  • 我注意到一件奇怪的事:你的财产是只能得到的。我相信约定是使可序列化类中的数据保持属性得到设置
  • 您可以尝试的另一件事是获取服务的WSDL,通过WSDL实用程序运行它,查看WSDL.exe如何生成可序列化类,并查看它们之间的差异——当然,这是一个特定于.NET 2.0/ASMX的建议
您的Person Action类可能缺少属性。XmlInclude也可能是不必要的

编辑以添加:

  • 我使用(在我的ASMX/.net2.0web服务中)XmlRoot,而不使用xmlclude
  • 我注意到一件奇怪的事:你的财产是只能得到的。我相信约定是使可序列化类中的数据保持属性得到设置
  • 您可以尝试的另一件事是获取服务的WSDL,通过WSDL实用程序运行它,查看WSDL.exe如何生成可序列化类,并查看它们之间的差异——当然,这是一个特定于.NET 2.0/ASMX的建议

您将变量公开的更改似乎解决了问题,但实际上并没有解决问题。服务现在正在序列化公共变量,而不是属性


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

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


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

非常感谢您的快速响应。。。我可以看到,当我把所有的私有字段都改为公共字段后,它就开始工作了。。。但是为什么公共属性引用私有字段时不会序列化呢?是的,正如“jvenema”所指出的,“setter”就是问题所在。非常感谢您的快速回复。。。我可以看到,当我把所有的私有字段都改为公共字段后,它就开始工作了。。。但是为什么公共属性引用私有字段时不会序列化呢?是的,正如“jvenema”所指出的,“setter”就是问题所在。非常感谢muchI能看到在我把所有的私人领域都改成公共领域后,它就起作用了。。。但是为什么公共属性引用私有字段时不会序列化呢?我可以看到,在我将所有私有字段更改为公共字段后,它就工作了。。。但是,如果公共属性引用私有字段,为什么不序列化它们呢?非常感谢您提出的宝贵建议。有些事告诉我你对“塞特”的看法是对的。让我们看看(5分钟)。谢谢你的宝贵建议。有些事告诉我你对“塞特”的看法是对的。让我们看看(5分钟)。非常感谢。