首页新闻找找看学习计划

asp.net WebService 传递实体参数问题

0
悬赏园豆:40 [待解决问题]
我有个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类的实例。

请问这在哪里出了问题呢?
小成时光的主页 小成时光 | 初学一级 | 园豆:143
提问于:2013-07-22 14:36
< >
分享
所有回答(2)
-2

你的TEST类是不是没有标注 

 

 [Serializable]

public class Test

Yu | 园豆:12944 (专家六级) | 2013-07-22 14:42

是的,标不标都是一样的,在引用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;}
}

 

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-07-22 14:51

@危笑: 这个

初始化了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 ,你说的问题在这吗
}
支持(0) 反对(0) Yu | 园豆:12944 (专家六级) | 2013-07-22 15:16

@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的。

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-07-22 15:22
0

这个方法是httpget  所有你在本地设置的值怎么会到webservice呢。

````` | 园豆:14268 (专家六级) | 2013-07-22 15:04

在调用WebService方法HelloWorld的时候,传递了这个对象

com.Test test = new com.Test();
test.Name="my name is tom";

Name的这个值是能传递到HelloWorld中,就是在调用方法之前,感觉是去初始化了StrList这个属性,在调用Name属性的时候是Null
支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-07-22 15:08

@危笑: get的时候是不会接受你传递的值的,只有Post操作的时候才会接受这个值返回出来。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2013-07-22 15:10

@imfunny: 

com.WebService api = new com.WebService();
com.Test test = new com.Test();
test.Name="my name is tom";

api.HelloWorld(test);

我在这样调用的时候,不知道是Post还是Get?

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-07-22 15:17

@imfunny: 很感谢!
这是以拼XML的方式来调用,而我现在的是直接传递对象过去,这样就省下了拼XML的繁琐

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-07-22 15:36

@危笑: 嗯,这本来就是webservice的本质。

post记得有参数控制的。 好几年没用过webservice了 所以有点忘记了。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2013-07-22 15:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册