XmlSerializer: как игнорировать производный классC#

Место общения программистов C#
Anonymous
XmlSerializer: как игнорировать производный класс

Сообщение Anonymous »

У меня есть два класса

Код: Выделить всё

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

Вернуться в «C#»