Как можно XML-сериализовать запечатанный класс без конструктора без параметров?

Я в настоящее время использую XMLSerializer сериализовать список моего класса. Одним из свойств класса является экземпляр закрытого класса, у которого нет конструктора без параметров, поэтому XML-сериализатор отказывается сериализовать класс. Как я могу обойти это? Мне нужно, чтобы это свойство было сериализовано.

Есть ли способ для меня, чтобы указать, как этот класс должен быть сериализован?

Мы хотели бы остаться с XML; Есть ли другой XML-сериализатор, который я мог бы использовать, не было бы этой проблемы?

Опять же, я прошу прощения, если это обман, но я понятия не имел, что искать.

[Редактировать] Чтобы уточнить, у меня нет доступа к источнику запечатанного класса.

5 ответов

Решение

Это невозможно сделать напрямую; XmlSerializer не может справиться с классами, которые не имеют конструктора без параметров.

Обычно я заключаю класс без параметров в другой класс, совместимый с XML. Класс-обертка имеет конструктор без параметров и набор свойств для чтения и записи; оно имеет FromXml метод, который вызывает конструктор реального класса.

[XmlIgnore]
public SomeClass SomeProperty { get; set; }

[XmlElement("SomeProperty")]
public XmlSomeClass XmlSomeProperty
{
    get { return XmlSomeClass.ToXml(SomeProperty); }
    set { SomeProperty = value.FromXml(); }
}

Использование IXmlSerializable, XmlSerializer слишком ограничен.

Вы можете реализовать ISerializable на содержащий класс, а затем реализовать пользовательский сериализатор.

В зависимости от сложности XML, вам может повезти с DataContractSerializer, Это не предлагает ничего похожего на тот же уровень управления XML, но полностью обходит конструктор. И работает для частных типов.

Я мог бы также спросить: действительно ли это должен быть XML? Существуют другие сериализаторы для таких вещей, как JSON или Protobuf, которые не имеют XmlSerializer ограничения.

Можете ли вы сделать личный конструктор без параметров? Это будет работать, если у вас есть доступ к коду класса.

Другие вопросы по тегам