Я должен предложить техническое предложение для сериализации большого набора объектов в XML. В настоящее время мы имеем базу данных с NHibernateXmlSerialization: вопросы о производительности и ссылках
Это на самом деле не точка, но так как я уже, что это будет ваш первый вопрос:
Почему XML
- У нас очень специфическая потребность: У нас много данных, но мы иногда используем их только один раз, чтобы настроить множество аппаратных устройств в сети. Это означает, что когда нам нужны данные, мы читаем всю базу данных.
- В настоящее время мы используем NHibernate, и создается впечатление, что из-за сложной структуры класса требуется многократно сериализовать/десериализовать данные.
- У нас есть много уровней иерархии, и это занимает много времени, чтобы сделать присоединяется
- Нам часто приходится изменять структуру, XSLT будет соответствовать отлично нашему обновлению нуждается
- Мы хотим избежать библиотек третьих стороной (лицензирование + выпуск)
Итак, теперь я думаю о том, что было бы лучшим способом сериализации этих данных.
Я знаю класс XmlSerializer
, но для того, что я понял, он работает отражением, получая все свойства, проверяя, есть ли какой-либо декоратор по методу/свойствам, и я обеспокоен проблемой производительности.
Я также беспокоюсь о ссылках: у нас есть корневой объект, а лист может ссылаться на другой лист (например: корень узла A, которому принадлежит объект B и C, и ссылка C B (очень фиктивный пример, в в нашем случае мы имеем много уровней/абстракцию между ними).
- Правильно ли я об использовании отражения с
XmlSerializer
? есть ли способ, чтобы избежать отражений (кроме реализацииIXmlSerializable
? - Как вы справляетесь эти объекты ссылаются дважды (и если вы только сериализуете одну ссылку, есть ли способ восстановить другую ссылку?
Я бы просто использовал 'XDocument' /' XElement'. –
Каждый сериализатор должен знать о наборе полей для типа. Единственный способ сделать это в целом - использовать отражение или предоставить интерфейс ('ISerializable',' IXmlSerializable'), который отбрасывает сериализацию пользователю. –
Исключением будет то, что вы пишете сериализатор, специально предназначенный для сериализации определенного графа объектов, а не обобщенный сериализатор. –