Как установить значения по умолчанию для свойств динамически загружаемых типов во время выполнения для сериализации XML - PullRequest
1 голос
/ 01 июня 2010

Мне нужно сериализовать классы динамически загружаемых типов с использованием XMLSerializer.

При использовании сериализатора XML неинициализированные значения не сериализуются. У меня нет контроля над сборками, с которыми я работаю, поэтому я не могу использовать атрибуты XML для указания значений по умолчанию для свойств. Поэтому я думаю, что мне нужно рекурсивно установить все свойства и подчиненные свойства в их значения по умолчанию, а затем сериализовать. (Пожалуйста, дайте мне знать, если есть лучший способ)

Подписан Этот :

Activator.CreateInstance (propType);

но строка выше жалуется на отсутствие конструктора без параметров для некоторых типов.

Попробовал это : subObject = FormatterServices.GetUninitializedObject (propType); но этот выдает ошибку «значение недопустимо» без внутреннего исключения.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

1 голос
/ 01 июня 2010

Если у рассматриваемых типов нет открытых конструкторов без параметров, вы будете бороться. Вы можете обойти проблему атрибутов с помощью перегрузки конструктора , которая принимает объект XmlAttributeOverrides, который можно использовать для полной настройки сериализатора, включая значение по умолчанию (через XmlAttributes.XmlDefaultValue), но некоторые вещи, которые вы не можете сделать - и обойти ограничения конструктора - одна из них.

Какой здесь сценарий?

  • если вы хотите xml, то я бы представил слой DTO: некоторые объекты выглядят как те, о которых вы говорите, но просты и находятся под вашим контролем. Идеально для XmlSerializer. Затем вы пишете код для сопоставления между двумя
  • если вы просто хотите сериализацию (а xml - это деталь реализации), то могут помочь другие сериализаторы. DataContractSerializer или protobuf-net , например; любой из них будет более универсальным.
...