我有个asp.net程序,在调用WebService的方法时,传递了一个对象,
这个对象里面有2个属性,一个是简单属性,一个是复杂属性,如下:
public class Test { public string Name{get;set;} public List<Str> StrList { get{ List<Str> strlist = new List<Str>() { new Str(){ Pro ="this is Str" + this.Name }, new Str(){ Pro ="this is Str111" + this.Name } }; return strlist; } } }
然后再添加Webservice 引用,
创建实例,调用方法
com.WebService api = new com.WebService(); com.Test test = new com.Test(); test.Name="my name is tom"; api.HelloWorld(test);
在调用HelloWorld的时候,StrList这个属性会去初始化,调用this.Name属性,然而Name属性是Null值,
但是 我在调用之前,有传值的。
webservice方法如下:
[WebMethd] public string HelloWorld(Test test) { return test.Name; }
我的问题是,在Webservice中的方法参数用到一个类,然后这个类里面有2个属性,一个简单属性,一个复杂属性,然后复杂属性又去用到了这个简单属性, 在调用Webservice的时候,这个复杂属性用到的简单属性没有值;当然再不通过Webservice调用的时候是没有问题,就是在我的项目里直接new这个webservice类的实例。
请问这在哪里出了问题呢?
你的TEST类是不是没有标注
[Serializable]
public class Test
是的,标不标都是一样的,在引用Webservice的时候已经将Test类序列化了,并在调用本地生成了Test类。
生成代码如下:
[Serializable] [DebuggerStepThrough] [XmlType(Namespace='baidu.com/')] [GeneratedCode("System.Xml","4.0.30319.225")] [DesignerCategory("code")] public class Test { public Test(); public string Name{get;set;} public Str[] StrList{get;set;} }
@危笑: 这个
初始化了StrList这个属性
在那初始化的?在下面代码中没见有
你是说
com.WebService api = new com.WebService(); com.Test test = new com.Test(); test.Name="my name is tom"; api.HelloWorld(test);
===========
[WebMethd] public string HelloWorld(Test test) { return test.Name;// test.Name是null ,你说的问题在这吗 }
@Yu:
public List<Str> StrList { get{ List<Str> strlist = new List<Str>() { new Str(){ Pro ="this is Str" + this.Name }, new Str(){ Pro ="this is Str111" + this.Name } }; return strlist; } }
在Test类中的这个属性, 返回一个集合,集合对象中用到了this.Name 这是这个Name是null,在调试的时候设置了断点,会跳到这个属性来
[WebMethd] public string HelloWorld(Test test) { return test.Name;// test.Name是null ,你说的问题在这吗 }
test.Name的值不是null的。