我在webservice里通过业务层dll访问数据库获得了一个泛型,现在我给客户端数据的时候是直接给他这个泛型对象,还是将这个泛型转为datatable,还是我自己按照业务层这个泛型类的属性自己写个类,然后把这个泛型赋予我这个类获得我自己的泛型再返回给客户端?

解决方案 »

  1.   

    没有什么注意事项么,如果我直接返回个dll的泛型对象,我感觉我这个webservice就没什么用了啊
      

  2.   

    class typeinfo
    {
    int id;
    string typename;
    public int Id{get;set}
    public string Typename{get;set}
    }
    //将实体添加到范型
    List<typeinfo> list=new List<typeinfo>();
    typeinfo type1=new typeinfo(1,"aa");
    typeinfo type2=new typeinfo(2,"bb");
    typeinfo type3=new typeinfo(3,"cc");
    list.add(type1);
    list.add(type2);
    list.add(type3);
    //取范型数据到实体
    foreach(typeinfo type in list)
    {
    if(type.id==1)
    {
    typeinfo type1=new typeinfo();
    type1.id=type.id;
    type1.typename=type.typename;
    }
    }
      

  3.   

    如果我想把这个list直接赋予给一心的typeinfo呢?
      

  4.   

    如果我想把这个list直接赋予给一心的List <typeinfo>呢?
      

  5.   

    如果我想把这个list直接赋予给一心的List <typeinfo>呢?
      

  6.   

    这需要显示转换了,因为你的list不是强类型化得 ms不保证安全,所以需要你自己逐个转换
      

  7.   

    不幸地是WebService不直接支持泛型,WCF有效支持但使用相当麻烦...你必须重新包装...
      

  8.   

    采用JSON格式也可以,,方便,,,高效。。
      

  9.   

    你当然不可能能够返回类型不确定的泛型,但是你可以返回类型参数确定的泛型。泛型就是类型的函数,其结果仍然是类型。因此,你可以返回List<MyUserType>这样类型的结果,尖括号中的类型必须是确定的。不过,webService最好给各种客户端语言平台使用,使用.net的泛型实际上有点“风险”,例如可能就不确定php会如何使用它。我的习惯是,将输出定义为数组,例如 MyUserType[]。而从List<>转换为数组只要使用它的ToAray()方法就可以了。我记得在vs2008以后,默认地它自动生成的webService客户端代理可以自动转换为数组定义,而不是在客户端使用泛型。尽管如此,我还是喜欢在设计服务端的输出类型时直接手动定义为数组。
      

  10.   

    如果不是有什么及其复杂的“技术”必须序列化,你就没有必要序列化。webService归根结底是要把数据序列化,然后才传递给客户端的。如果你手动序列化,然后再让webService给你把序列化的结果再序列化一遍,然后在客户端也是连续两个反序列化,这显然是多此一举。就直接传递强类型对象就可以了。