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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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