XmlSerializer автоматически определяет тип из XML при десериализации (.NET 2.0)? - PullRequest
2 голосов
/ 15 ноября 2011

В настоящее время я использую XmlSerializer для сериализации различных объектов (.NET 2.0)

Сериализованное содержимое выглядит следующим образом:

<?xml version="1.0"?>
<InitActivityAction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <EmploymentID>1</EmploymentID>
  <DateFrom>2011-11-14T21:08:17.5893302Z</DateFrom>
</InitActivityAction>

Конструктор XmlSerializer требует указания типа Type.Но я использую много типов объектов.

Есть ли способ заставить XmlSerializer «автоматически определять» требуемый тип из XML?

1 Ответ

4 голосов
/ 21 декабря 2011

Не из коробки.

У вас есть варианты, хотя.Вот некоторые из них:

(1) Вы можете просмотреть XML, используя, скажем, XPath, чтобы получить имя корневого элемента для определения типа объекта (или использовать отдельные пространства имен для каждого класса).

(2) Вы также можете использовать более сложный XML-сериализатор, такой как этот в CodeProject, который будет автоматически определять типы из «словаря», а затем вы можете использовать отражение, чтобы определить, какой это тип на самом деле.

(3) Вы также можете просто попытаться десериализовать XML с каждым XmlSerializer для каждого имеющегося у вас типа - и перейти к следующему, если он потерпит неудачу.Не очень приятно.

(4) Наконец, вы можете создать класс, в котором есть член для каждого из ваших объектов, и сериализовать его вместо каждого объекта в отдельности, например, член enum, чтобы помочь вам написать код дляизвлечь правильный член.Опять же, не очень хорошее решение.

Обратите внимание, что все эти подходы увеличивают производительность.И они не совсем хорошие варианты :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...