我有一个类 Car 和一个派生的 SportsCar: Car
像这样的东西:
public class Car
{
public int TopSpeed{ get; set; }
}
public class SportsCar : Car
{
public string GirlFriend { get; set; }
}
我有一个带有返回汽车的方法的网络服务,即:
[WebMethod]
public Car GetCar()
{
return new Car() { TopSpeed = 100 };
}
它返回:
<Car>
<TopSpeed>100</TopSpeed>
</Car>
我有另一种方法也可以返回这样的汽车:
[WebMethod]
public Car GetMyCar()
{
Car mycar = new SportsCar() { GirlFriend = "JLo", TopSpeed = 300 };
return mycar;
}
它编译得很好,一切正常,但是在调用它时我得到:
System.InvalidOperationException:生成 XML 文档时出错。---> System.InvalidOperationException:类型 wsBaseDerived.SportsCar 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。
我觉得很奇怪它不能将它序列化为一辆直车,因为 mycar 是一辆汽车。
在我们的 WebMethod 上添加 XmlInclude 可以消除错误:
[WebMethod]
[XmlInclude(typeof(SportsCar))]
public Car GetMyCar()
{
Car mycar = new SportsCar() { GirlFriend = "JLo", TopSpeed = 300 };
return mycar;
}
现在它返回:
<Car xsi:type="SportsCar">
<TopSpeed>300</TopSpeed>
<GirlFriend>JLo</GirlFriend>
</Car>
但我真的希望返回基类,而不需要派生类的额外属性等。
如果不创建映射器等,这是否可能?
请说是的;)