Bonjour à tous,
Je me heurte à un problème actuellement dans le cadre de mon projet perso en XNA 4.0 concernant la sérialisation automatique des objets. Voici mon problème :
J'ai tout d'abord une classe du jeu qui possède des propriétés sérialisables (simplifiée) :
Mon but est de pouvoir récupérer et setter les attributs sérialisable de cette classe sans la connaître a priori, le tout avec XNA. Plus précisément, je voudrais créer une classe Wrapper dans le moteur qui va encapsuler un objet de type MyObject, dans lequel on peut spécifier des propriétés à la volée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 using Microsoft.Xna.Framework.Content; namespace Game { public class MyObject { [ContentSerializer( ElementName = "Position" )] public Vector2 m_vPosition; [ContentSerializer( ElementName = "Dimension" )] public Vector2 m_vDimension; } }
Ainsi, avec le XML suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 using Microsoft.Xna.Framework.Content; namespace Engine { public class Wrapper { [ContentSerializer( ElementName = "ObjectType" )] private string m_sObjectType; [ContentSerializer( ElementName = "Properties", CollectionItemName = "Property" )] private Dictionary<string,string> m_aProperties; public Wrapper(); public void SetProperty( string sProperty, string sValue ); public Object GetObject(); } }
On obtiendrais par la fonction GetObject de Wrapper un objet de type MyObject dont les attributs possèdent les bonnes valeurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <Object AssetType = "Engine.Wrapper"> <ObjectType>MyObject</ObjectType> <Properties> <Property> <Key>Position</Key> <Vaue>32 32</Value> </Property> <Property> <Key>Dimension</Key> <Value>16 16</Value> </Property> </Properties> </Object>
Je sais que cela est possible avec la réflexion, et j'avais d'ailleurs commencé à écrire le code pour faire cela, mais cela implique de réécrire en quelque sorte toute la couche de sérialisation de XNA... Ma question est donc de savoir si le framework est suffisament customisable pour désérialiser des attributs à partir de chaînes de caractères. J'ai cherché un peu dans la doc, mais je n'ai rien trouvé à ce sujet... Sinon peut-être que quelqu'un a une meilleure idée pour réaliser ce que je veux faire sans passer par la réflexion ?
Merci d'avance
Partager