Десериализация массива с производными объектами - PullRequest
0 голосов
/ 20 августа 2011

У меня есть XML-документ, который выглядит примерно так: и звук, и музыка являются производными типами от базового класса аудио.Они хранятся в Списке звуков.Как я могу десериализовать это?Поскольку простое выполнение (List) x.Deserialize выдаст список базовых типов.

<sounds>
 <sound name="SFX_PunchObject">
  <file name="SFX_PunchObject.ogg" size="5414"/>
 </sound>
 <music name="HWAS_Cutscene1">
  <file name="HWAS_Cutscene1.m4a" size="135049"/>
 </music>
</sounds>

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 августа 2011

Обычно вы можете использовать

[XmlInclude(typeof(ChildType))]

в своем базовом классе, а затем можете десериализовать несколько типов в одном списке в базовый тип.Я полагаю, что для этого требуется наличие атрибута

type="music"

вместо использования различных корневых элементов.

Возможно, вам придется реализовать ISerializable, чтобы получить то, что вам нужно.

0 голосов
/ 20 августа 2011

Вы можете написать пользовательский сериализатор для десерализации практически из любого формата, который содержит необходимую информацию для заполнения вашего объекта.

...