Question

Créer une classe (appeler formElement). Cette classe doit avoir des propriétés telles que les métadonnées qu'ils ont avec des éléments de données (nom, numéro de séquence, valeur qui est juste une chaîne, etc.).

Cette classe a comme attributs de type validation des classes bloc d'application de validation.

Je veux sérialisation au format XML et désérialiser. Assurez-vous que toutes les propriétés de la classe, y compris les attributs de bloc d'application de validation survivre sérialisation.

une suggestion?

Pas de solution correcte

Autres conseils

Le framework .NET a ce construit, en utilisant C # vous le feriez comme ceci:

// This code serializes a class instance to an XML file:
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextWriter writer = new StreamWriter(xmlFileName))
{
     xs.Serialize(writer, InstanceOfObjectToSerialize);
} 

Et cet extrait est un exemple de la façon dont désérialiser un fichier XML Retour à une instance de classe:

// this code creates a class instance from the file we just made:
objectToSerialize newObject;
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextReader reader = new StreamReader(xmlFileName))
{
    newObject = (ObjectToSerialize) xs.Deserialize(reader);
}

Vous devez marquer votre classe avec l'attribut [Serializable] pour ceux-ci de travailler. Si vous voulez faire de votre sortie XML un peu plus jolie, vous pouvez utiliser [XmlElement] et [XmlAttribute] attributs sur les propriétés de votre classe pour avoir sérialisation dans votre schéma de choix.

En disant sérialisation, voulez-vous dire utiliser le mécanisme de sérialisation officiel, ou obtenir un effet similaire?

Si vos objets sont les haricots, vous pouvez utiliser la réflexion pour écrire un service général qui prend une classe et écrit son nom de classe et les propriétés. Il peut lire de façon similaire des matériaux à partir du XML et générer l'objet (qui est ce que Apache digesteur fait essentiellement).

Qu'est-ce que dit Jonathon Hollande.

Cependant, vous avez également posé des questions sur la validation. Si vous utilisez le code Jonathan affiché, toutes vos propriétés et sérialiser correctement désérialiser. Mais si vous voulez vraiment le vérifier, il y a une propriété que vous pouvez définir avec votre objet XmlSerializer pour un schéma * .xsd pour validation. Vous pouvez créer le schéma assez facilement de votre classe en utilisant l'outil de ligne de commande xsd.exe qui est inclus avec Visual Studio.

En outre, il semble que vous pouvez contrôler si certaines propriétés de votre classe sont sérialisés comme des attributs ou des éléments. Jonathon a touché à ce sujet, mais je veux montrer un exemple:

[Serializable]
public class FormElement
{
   [XmlAttribute]
   public string Name {get; set;};

   [XmlAttribute]
   public int Sequence {get; set;};

   [XmlAttribute]
   public string Value {get; set;};

   [XmlElement]
   public Validation OnValidate{get; set;}

   [NonSerialized]
   public string UnimportantProperty {get; set;};

}

Enfin, le type pour chaque propriété que vous souhaitez sérialiser doit être sérializable et types complexes doivent être sérialisés comme XmlElements. Sinon, vous ne serez pas en mesure de le faire.

XStream est une très bonne bibliothèque java pour faire cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top