1

我想从我的 Web 服务中检索对象列表,但我正在努力处理对象类型。

我有这个代码:

 [WebMethod]
    public Car[] GetAllCars()
    {

        List<Car> cars = new List<Car>();
        cars.Add(new Car ("fiat", 1999);
        cars.Add("opel" ,2007);
        cars.Add("chevrolet",2007);
        return cars.ToArray(); // 
     }

当我从浏览器测试网络服务时,一切都很好。它向我展示了应该是什么。

但是在客户端当我尝试做

 MyWebService.WebService1SoapClient cars = new MyWebService.WebService1SoapClient();
        Car[] l = (Car[]) cars.GetAllCars();

它说无法将 ClientApp.MyWebService.Car[] 转换为 ClientApp.model.Car[]

双方(客户端和 Web 服务)的 Car 类是相同的。

我应该怎么做才能解决这个问题?

谢谢你提前。

4

3 回答 3

3

虽然它们可能看起来相同,但这里涉及两个不同的 Car 类:

  1. ClientApp.model.Car - 这是隐藏在 web 服务后面的原始类。
  2. ClientApp.MyWebService.Car - 这是一个近似副本,从 SOAP WSDL 创建

副本不会有任何私有成员,也没有任何原始 Car 的方法。

只需执行此操作即可取回汽车,

var carsWebservice = new MyWebService.WebService1SoapClient();
var cars = carsWebservice.GetAllCars();

这将返回一个 ClientApp.MyWebService.Car 数组

于 2012-04-25T03:58:25.227 回答
2

如果 Car 在两边都相同,则没有理由强制转换它,也没有理由在声明中使用类型。让编译器决定为 l 使用什么类型...

var l = cars.GetAllCars();
于 2012-04-25T02:28:33.073 回答
0

它应该适合你:

MyWebService.WebService1SoapClient _cars = new MyWebService.WebService1SoapClient();

public List<Car> Cars;

例如在按钮事件中:

private void button_valider_Click(object sender, EventArgs e)
    {
        SqlCeConnection connexion =Connexion.getInstance().OpenConnection();
        Cars= new List<Car>();
        Cars= _cars .GetAllCars().ToList();

        foreach (var car in Cars)
        {
            int year= car.year;
             ...

        }

    }
于 2017-07-24T11:06:15.610 回答