У меня есть класс Car и производная SportsCar: Car
Как то так:
public class Car
{
public int TopSpeed{ get; set; }
}
public class SportsCar : Car
{
public string GirlFriend { get; set; }
}
У меня есть веб-сервис с методами, возвращающими Cars, т.е.:
[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 - это машина.
Добавление 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>
Но я действительно хочу вернуть базовый класс,
без дополнительных свойств и т. д. из производного класса.
Это вообще возможно без создания картографов и т. Д.?
Скажите, пожалуйста, да;)