Web service方法返回List或者ArrayList数据类型

  我们调用web service的时候经常需要返回一些对象集合(本文章环境.net framework2.0+)。

准备工作:

//定义一个实体
public class Entity
    {
        private string _Name;

        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
        public Entity()
        { 
        }
        public Entity(string Name)
        {
            _Name = Name;
        }
    }

1.返回List<T>:

定义web service方法

[WebMethod(Description = "测试", EnableSession = true)] 
public List<Entity> HelloWorld()
{ 
     List<Entity> list = new List<Entity>();
     list.Add(new Entity("kian"));return list;
}

客户端调用web service方法:

MyWebReference.Service1 service = new MyWebReference.Service1();
List<MyWebReference.Entity> list = new List<MyWebReference.Entity>(service.HelloWorld());

以上调用都是正常的。问题在下面。

 

2.返回ArrayList:

[WebMethod(Description = "测试", EnableSession = true)]
public ArrayList HelloWorld()
{
     ArrayList al = new ArrayList();
     al.Add(new Entity("kian"));
     return al ;
}

客户端调用web service方法:

问题就在这里,为什么会这样呢?

原来是这样,ArrayList跟List不一样,它不是强类型,生成代理服务没办法去判断创建什么类型,那么这里怎么解决呢?

可以这么想,既然没办法判断创建类型,那么我们就明确指定创建的类型。

用XMLInclude属性明确告诉web service生成的类型:

[WebMethod(Description = "测试", EnableSession = true)]
[System.Xml.Serialization.XmlInclude(typeof(Entity))]//告诉webservice,ArrayList将包含Entity的元素类型
public ArrayList HelloWorld()
{
     ArrayList al = new ArrayList();
     al.Add(new Entity("kian"));
     return al ;
}

这样就可以在调用的时候像List一样访问Entity对象。

posted @ 2014-03-17 17:22  Bay-Max  阅读(1422)  评论(0编辑  收藏  举报