le deuxième jour, j'essaie de résoudre mon problème et je pense que j'ai besoin d'aide pour le faire. =/Game UI Xml Deserializer
Donc, j'essaie de faire une interface utilisateur pour mon projet qui, pour chaque scène (ou écran, peu importe comment vous l'appelez) prendra un XML et en construira des objets.
Fondamentalement, mon code ressemble à ça:
classe de base pour ce stade - tous les autres sont héritant de celui-ci:
class BaseStage {
[XmlIgnore]
public Type Type;
[XmlIgnore]
public string XmlPath;
public BaseChildren UIScheme;
public BaseStage()
{
Type = GetType();
XmlPath = "Template/" + Type.ToString().Replace("Some.Project.Namespace.", "") + ".xml";
}
public virtual void LoadContent()
{
if (File.Exists(XmlPath))
{
using (TextReader reader = new StreamReader(XmlPath))
{
XmlSerializer uiDeserializer = new XmlSerializer(typeof(BaseChildren));
UIScheme = (BaseChildren)uiDeserializer.Deserialize(reader);
}
}
}
Quelques UI Classes:
public class BaseChildren
{
public List<BaseChildren> Children = new List<BaseChildren>();
public virtual void AddChild(BaseChildrenchild)
{
Children.Add(child);
}
}
public class Dialog : BaseChildren {
public string Type;
public Rectangle Position;
}
public class Label : BaseChildren {}
// ... and so on
Mon XML fichier:
<?xml version="1.0" encoding="utf-8" ?>
<UIScheme>
<Children>
<Dialog>
<Type>Blue</Type>
<Position>
<X>43</X>
<Y>100</Y>
<Width>350</Width>
<Height>200</Height>
</Position>
</Dialog>
</Children>
</UIScheme>
J'ai essayé de nombreuses variantes et je ne sais pas comment forcer le sérialiseur à charger ces objets =/ J'ai également essayé de remplacer XmlSerializer et j'ai essayé d'écrire ma propre fonction de lecture, mais il est difficile d'obtenir des tutoriels pour le faire correctement dans Google
Eh bien, la racine de votre objet en XML est 'UIScheme', alors que dans votre hiérarchie de classe ESt' BaseStage' . – HimBromBeere
Votre problème est-il que vous ne savez pas à l'avance quelle sous-classe de 'BaseStage' a été sérialisée dans le fichier, et donc ne savez pas à l'avance quel type de fichier passer à' XmlSerializer'? Parce que @HimBromBeere a noté que l'élément XML racine ne correspond pas à 'BaseStage', il correspond à quelque chose de complètement différent appelé' UIScheme'. – dbc