小编Hen*_*riM的帖子

C#如何在Web服务中返回我的基类

我有一辆Car和派生的SportsCar:Car这样的
东西:

public class Car
{
    public int TopSpeed{ get; set; }
}


public class SportsCar : Car
{
    public string GirlFriend { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个Web服务,返回汽车的方法,即:

[WebMethod]
public Car GetCar()
{
    return new Car() { TopSpeed = 100 };
}
Run Code Online (Sandbox Code Playgroud)

它返回:

<Car>
<TopSpeed>100</TopSpeed>
</Car>
Run Code Online (Sandbox Code Playgroud)

我有另一种方法也返回这样的汽车:

[WebMethod]
public Car GetMyCar()
{
    Car mycar = new SportsCar() { GirlFriend = "JLo", TopSpeed = 300 };
    return mycar;
}
Run Code Online (Sandbox Code Playgroud)

它编译很好和一切,但在调用它时我得到:
System.InvalidOperationException:生成XML文档时出错.---> System.InvalidOperationException:不期望wsBaseDerived.SportsCar类型.使用XmlInclude或SoapInclude属性指定静态未知的类型.

我觉得奇怪的是,因为mycar是一辆汽车所以它不能将其序列化为直车.

在WebMethod上添加XmlInclude可以消除错误:

[WebMethod]
[XmlInclude(typeof(SportsCar))]
public Car GetMyCar()
{
    Car …
Run Code Online (Sandbox Code Playgroud)

c# serialization web-services derived base

6
推荐指数
1
解决办法
4884
查看次数

标签 统计

base ×1

c# ×1

derived ×1

serialization ×1

web-services ×1