2009-01-17 8 views
0

Je sauvegarde actuellement un .ec (C#) usercontrol sur le disque en tant que fichier XML en enregistrant chaque propriété en tant qu'élément dans le document xml. Le fichier est utilisé pour la recréation ultérieure des contrôles au moment de l'exécution. Je me demande s'il est possible ou mieux de sauvegarder le contrôle sous forme de fichier binaire. Il y aurait beaucoup de contrôles donc je suppose qu'il devrait y avoir une section d'en-tête décrivant l'emplacement et la longueur de chaque contrôle sauvegardé. Pensées?C# quelle est la meilleure méthode pour sauvegarder les contrôles créés dynamiquement

Brad

BTW ceci est une application Windows

EDIT:

ce que j'ai actuellement inplace est fonction de membre du public qui utilise la classe propertyDescriptior à itinérante à travers toutes les propriétés et créer un fichier XML document de cela.

 PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(this); 

     for (int i = 0; i <= pdc.Count - 1; i++) 
     { pdc[i].Name 
    pdc[i].PropertyType 
    pdc[i].Category 

}

je regarderai dans la création de la classe Serializable - grâce

+0

Utilisez-vous la sérialisation? –

+0

Je me demandais juste, mais pourquoi sauvegarder les contrôles sur le disque pour commencer? – Juliet

+0

Princesse: l'application envoie le fichier à un ordinateur distant pour l'affichage des données de process sur un écran LCD 52 " – Brad

Répondre

1

Nous devions le faire pour une application pilotée par les données dans laquelle un utilisateur pouvait créer des vues persistantes. Nous avons fait une version XML pour commencer mais nous sommes passés à l'utilisation de BinaryFormatter et de l'interface ISerializable car cela nous permet de contrôler exactement ce qui est persistant et quels constructeurs utiliser. Pour les contrôles, nous avons effectivement persisté le CodeCompileUnit que le concepteur a créé, mais cela signifie que vous devez utiliser un concepteur pour les mettre en page.

+0

+1 pour ISerializable.. –

1

Winforms contrôles ne sont pas sérialiser particulièrement bien, et vous pourriez avoir beaucoup de difficulté à obtenir les bases-classes (c.-à- pas votre code) pour jouer à la balle. Des choses comme Color, par exemple, fournissent régulièrement étonnamment difficile à sérialiser.

Xml serait un choix évident (si quelque peu prévisible), mais vous devez généralement nommer des sous-classes à l'avance. Et bien sûr, les classes de base ne seront pas marquées sérialisables. BinaryFormatter éviterait cela, mais en tant que sérialiseur basé sur le terrain, vous auriez des problèmes avec les "handles" etc dans les classes de base, qui sont sérialisées sans signification. Je ne dis pas que cela ne peut pas être fait - mais ce ne sera pas trivial non plus. En tant que starter, vous voudrez regarder TypeConverter.GetProperties, et utiliser le Converter de chaque pour obtenir la valeur comme une chaîne invariante.

+0

merci J'ai l'option XML depuis un certain temps mais je rêvais d'autres méthodes de sauvegarde que je pourrais utiliser. – Brad

+0

J'utilise PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties (this); foreach (PropertyDescriptor pd en pdc) de recueillir toutes les propriétés que je avais besoin pour les loisirs – Brad

0

juste eu une pensée: peut-être vous n'avez pas besoin de sérialiser la base/sous-classes. Peut-être que vous pourriez écrire un autre searializer qui sérialise seulement le niveau supérieur de la hiérarchie d'héritage de classe? seulement en sérialisant vos classes (vous avez écrit) et en stockant peut-être des méta-données pour les classes de base que vous pourriez dériver (pour que vous puissiez les recaler sur la désérialisation)? Cela pourrait aussi être un tourbillon.

Questions connexes