2010-04-03 2 views
0

Dire que j'ai une classe (modèle) appelé instance avec des propriétés DatbaseHostname, AccessManagerHostname, DatabaseUsername et DatabasePasswordStockage entité en XML, en utilisant MVVM en lecture/écriture dans application WPF

public class Instance 
{ 
    private string _DatabaseHostname; 

    public string DatabaseHostname 
    { 
     get { return _DatabaseHostname; } 
     set { _DatabaseHostname = value; } 
    } 
    private string _AccessManagerHostname; 

    public string AccessManagerHostname 
    { 
     get { return _AccessManagerHostname; } 
     set { _AccessManagerHostname = value; } 
    } 
    private string _DatabaseUsername; 

    public string DatabaseUsername 
    { 
     get { return _DatabaseUsername; } 
     set { _DatabaseUsername = value; } 
    } 

    private string _DatabasePassword; 

    public string DatabasePassword 
    { 
     get { return _DatabasePassword; } 
     set { _DatabasePassword = value; } 
    } 
} 

Je suis à la recherche d'un Exemple de code pour lire/écrire ce modèle en XML (de préférence linq2XML) => stocker 1: n instances en XML. je peux gérer la vue et ViewModel me séparer, même si ce serait bien si quelqu'un avait un échantillon de cette partie trop ..

Répondre

3

Eh bien, vous pouvez utiliser LINQ to XML, mais votre classe est un candidat idéal pour la sérialisation XML, ce qui est beaucoup plus simple à mon humble avis:

var list = new List<Instance>(); 
... 

// Serialization 

var xs = new XmlSerializer(typeof(List<Instance>)); 
using (var writer = XmlWriter.Create(filename)) 
{ 
    xs.Serialize(writer, list); 
} 

... 

// Deserialization 

using (var reader = XmlReader.Create(filename)) 
{ 
    list = xs.Deserialize(reader) as List<Instance>; 
} 
+0

bonne idée, merci! –

0

Je ne sais pas comment vous voulez que votre XML structuré, mais cela devrait fonctionner:

List<Instance> instances = new List<Instance>(); 
    // Get your instances here... 

    var baseNode = new XElement("Instances"); 

    instances.ForEach(instance => baseNode.Add("Instance", 
     new XAttribute("DatabaseHostname", instance.DatabaseHostname), 
     new XAttribute("AccessManagerHostname", instance.AccessManagerHostname), 
     new XAttribute("DatabaseUsername", instance.DatabaseUsername), 
     new XAttribute("DatabasePassword", instance.DatabasePassword)));