Код: Выделить всё
public class Base
{
public int val { get; set; } = 10;
}
public class Derived : Base
{
public int val2 { get; set; } = 20;
}
Код: Выделить всё
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Base));
Derived b = new Derived();
using (var file = new StreamWriter( "test.xml" ))
{
xmlSerializer.Serialize( file, b );
}
InvalidOperationException: тип WordClockDesigner.Derived не ожидался. Используйте атрибут XmlInclude или SoapInclude, чтобы указать типы, которые не известны статически.
Теперь я спрашиваю: почему он переходит в Derived, когда я сказал ему сериализовать Base? Это глупо, я хочу, чтобы он сериализовал только свойства из базы...
Примечание: это упрощенный пример; мой реальный код более сложен, и проблема, которую я пытаюсь решить, связана с пропуском десятков свойств, а не одного или двух. Мне нужно найти решение, которое работает без необходимости навсегда запоминать странный трюк.
NB2: использование XmlSerializer(Type, Type[]) не является решением, поскольку я хочу исключить производный класс.
Я использую .NET 8
Подробнее здесь: https://stackoverflow.com/questions/797 ... ived-class
Мобильная версия