2016-08-22 1 views
1

Nous essayons de sauvegarder l'état de notre objet en utilisant le sérialiseur XML. Pour une discussion objet à supposer comme:Enregistrement de l'état de l'objet à l'aide de Serializer xml. Recommandation d'approche pour obtenir le nom de noeud à partir d'une propriété ou d'une chaîne codée en dur?

Class Program 
{ 
    public string Char1 {get; set;} 
    public XMLNode Serialize (XmlDocument doc) 
    { 
     var node = document.CreateElement("Mod") 
     node.SetAttribute("Char1", Char1.ToString()); 
    } 
} 

Ici, nous obtenons la valeur de la propriété Char1 et d'essayer de l'écrire dans un nœud avec le nom Char1.

Vaut-il mieux que le nom de noeud "Char1" soit dérivé de la propriété Char1 en utilisant la réflexion. Mais cela peut entraîner la modification du document XML souvent lorsque le nom de la propriété est modifié.

Si le nom de la propriété est modifié et que la chaîne n'est pas mise à jour, la valeur du document XML ne correspondra pas au contexte de ce champ.

Quelle approche est préférable?

S'il vous plaît suggérer s'il existe une autre meilleure approche pour éviter les chaînes magiques lors de l'écriture de fichier XML.

Répondre

0

Je préférerais suivre la voie suivante: Créer une classe qui contient toutes les données que vous voulez wo sérialiser. Ensuite, créez une instance de XmlSerializer comme ceci:

xmlDocument = new XmlDocument(); 

using (var stringWriter = new StringWriter(CultureInfo.InvariantCulture)) 
{ 
    using (var xmlTextWriter = new XmlTextWriter(stringWriter)) 
    { 
     xmlTextWriter.Formatting = Formatting.Intented; 
     var xmlSerializer = new XmlSerializer(myObject.GetType()); 
     xmlSerializer.Serialize(xmlTextWriter, myObject); 
     xmlDocument.PreserveWhitespace = true; 
     xmlDocument.LoadXml(stringWriter.ToString()); 
    } 
} 
+0

Dans le contexte de la question, ce que vous suggérez est d'obtenir le nom de noeud de la propriété elle-même, est-ce que ma compréhension est correcte? – Versatile