Deserialize inherited classes into the same list in XNA
- by M0rgenstern
I am writing a Gui for a game (for what else ...).
Therefor I wrote a class GuiElement which has some serializeable fields. From this class I deflect a Class "Button" which has one serializeable field more.
Furthermore, I have a Class GuiWindow, which is as well deflected from "GuiElement".
An Object of this Class has a Field "HandledElements" of the type "List". To know the layout of the Menues, I use XML-Files, which look like that (for example):
<?xml version="1.0" encoding="utf-8" ?>
<XnaContent xmlns:Generic="System.Collections.Generic">
<Asset Type="System.Collections.Generic.List[GUI.GuiWindow]">
<Item>
<Position>0 0</Position>
<AlternativeImagePath></AlternativeImagePath>
<IsActive>true</IsActive>
<Name>MainMenu</Name>
<HandledElements>
<Item>
<Position>100 100</Position>
<AlternativeImagePath></AlternativeImagePath>
<IsActive>true</IsActive>
<Name>Optionen</Name>
<Caption>Optionen</Caption>
</Item>
</HandledElements>
</Item>
<Item>
<Position>0 0</Position>
<AlternativeImagePath></AlternativeImagePath>
<IsActive>false</IsActive>
<Name>Options</Name>
<HandledElements>
</HandledElements>
</Item>
</Asset>
</XnaContent>
As you can see, the first window has in its "HandledElements" List an Item with the Field . This is a field which only a Button has. The Problem is now: I can't deserialize this XML file, because GuiElement does not have this Field, it only has the few fields above.
I thought it would know automatically which Class to use,but it doesn't.
Do I really have to give my windows a list for each child class of GuiElement?
Or can I do another workaround?