从 Web 服务 C# 检索对象列表

本文关键字:对象 列表 检索 Web 服务 | 更新日期: 2023-09-27 18:32:13

我想从我的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(); // 
     }

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

但是在客户端,当我尝试做

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

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

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

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

谢谢你提前.

从 Web 服务 C# 检索对象列表

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

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

该副本将没有任何私人成员,也没有任何原始汽车的一部分的方法。

只需这样做即可取回汽车,即

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

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

如果 Car 在两边相同,则没有理由铸造它,也没有理由在声明中使用类型。 让编译器决定使用哪种类型...

var l = cars.GetAllCars();

它应该适合你:

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;
             ...
        }
    }