У меня есть причудливый сценарий, который благодаря нашему использованию .NET 4 и C # 4, похоже, оказался в мешке. Как выясняется, решение является более сложным и, возможно, не существует вне какого-то совершенно нестандартного решения.
В двух словах, мне нужно сериализовать динамический объект, который имеет набор фиксированных, обязательных свойств и произвольный набор дополнительных свойств. Корневой элемент должен включать настраиваемое пространство имен xml в атрибуте xmlns, и некоторым дочерним объектам может потребоваться использовать разные пространства имен xml. Нашим первым подходом было получение пользовательского класса из DynamicObject
. Это позволило нам добавить XmlRootAttribute
и указать пространство имен. За исключением сложности определения пользовательских пространств имен для динамических свойств, даже этот простой подход, похоже, не сработал. XmlSerializer
, несмотря на то, что в качестве объекта для сериализации передается переменная dynamic
, просто сериализует жестко закодированные свойства и игнорирует любые динамические аспекты объекта.
Мы уже некоторое время используем JsonFx 2.0 и решили попробовать. С некоторыми осторожными улучшениями нашего производного DynamicObject
мы смогли заставить JsonFx 2.0 сериализовать весь необходимый контент, однако он отказывается сериализовать любые атрибуты xmlns.
Есть ли способ сериализации частично динамического объекта в xml и включения определенных пространств имен? Или это просто случай, когда нужно определить произвольно сложный граф объектов, выбрать граф, который соответствует конкретным потребностям, динамически полученным во время выполнения?
Кажется, что история сериализации XML для .NET 4 довольно слаба, когда дело доходит до сериализации динамических объектов.