XmlSerializer - игнорирование унаследованного несериализуемого члена
Предположим, у вас есть два класса, один наследует другой, а потомок должен быть сериализован / десериализован с помощью XmlSerializer. Однако родительский элемент содержит элемент, который нельзя сериализовать, например, словарь.
public class Parent {
public Dictionary<string, int> dictionary;
}
Родительский класс - это библиотека, используемая для многих других скриптов. Это не может быть изменено. Теперь дочерний класс содержит только сериализуемые члены:
public class Child : Parent {
[XmlElement]
public int foo;
}
При попытке вызвать сериализатор я получаю сообщение о том, что словарь не сериализуем. При попытке сериализации в JSON мне удалось уйти ценой предупреждения. Я только что создал другого члена с тем же именем и типом и использовал ScriptIgnore:
public class Child : Parent {
public int foo;
[ScriptIgnore]
public Dictionary<string, int> dictionary;
}
Я снова попробовал тот же трюк (используя XmlIgnore), но это не сработало, ошибка была та же. Единственный способ, которым мне удалось пройти через это, - создать отдельные классы, которые будут обслуживать только де-сериализацию XML, а затем скопировать значения обратно в соответствующее место.
Кто-нибудь знает лучший способ обойти это? Могу ли я заставить XmlSerializer забыть о родительском словаре каким-либо образом?