0
votes

Comment puis-je lire un fichier XML et mettre les informations dans des objets?

J'ai une fonction qui écrit toutes les informations des objets que j'ai dans une liste dans un fichier XML.

    public static void UpdateXML()
    {
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        XmlWriter Writer = XmlWriter.Create("path", settings);
        Writer.WriteStartDocument();
        Writer.WriteStartElement("Accounts");
        foreach (var acc in Bank.Bankaccountlist)
        {
            Writer.WriteStartElement("Account");
            Writer.WriteAttributeString("ID", acc.id.ToString());
            Writer.WriteElementString("Name", acc.GetName());
            Writer.WriteElementString("Lastname", acc.GetLastname());
            Writer.WriteElementString("Balance", acc.GetBalance().ToString());
            Writer.WriteEndElement();
        }
        Writer.WriteEndElement();
        Writer.Flush();
        Writer.Close();
    }

Maintenant, lorsque le programme est fermé, toutes les données sont toujours dans le fichier. Ainsi, dès que le programme redémarre, il devrait recréer tous les anciens objets (la création d'un objet Account mettra automatiquement dans la liste).

Quelqu'un pourrait-il me dire comment cela serait possible?

Notez que int id et double balance .


3 commentaires

Est-ce que cela répond à votre question? Comment désérialiser un document XML


Je l'ai essayé, mais cela n'a pas fonctionné.


«Cela n'a pas fonctionné» est et ne sera jamais une description précise d'un problème. Pourquoi ça n'a pas marché? Qu'avez-vous essayé? Y a-t-il des messages d'erreur? Pouvez-vous nous fournir un exemple reproductible minimal afin que nous puissions recréer votre problème?


3 Réponses :


0
votes

Pour donner une réponse en fonction de votre solution réelle, vous devez utiliser un XmlReader comme contrepartie de votre XmlWriter . Pour chaque type de propriété autre que string, vous devez utiliser Convert ou la méthode TryParse appropriée. Mais vous pouvez jeter un œil au XmlSerializer qui cible exactement votre cas d'utilisation.

https://docs.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlserializer?view=netcore-3.1


0 commentaires

0
votes

Vous devrez également marquer chaque partie de l'o jet comme un attribut xml afin de sérialiser l'objet en xml. Ensuite, vous pouvez parcourir les fichiers dans le répertoire xml et les désérialiser à l'aide du lecteur xml. Je crois qu'il existe un paquet nuget pour vous aider.


0 commentaires

1
votes

Je suis venu à la solution suivante:

public static void ReadXML()
{
    DataSet xmlData = new DataSet();
    xmlData.ReadXml("path");

    foreach (DataTable table in xmlData.Tables)
    {
        foreach (DataColumn column in table.Columns)
        {
            foreach (DataRow row in table.Rows)
            {
                Account newAcc = new Account(row.ItemArray[0].ToString(), row.ItemArray[1].ToString(), Convert.ToDouble(row.ItemArray[2]), Convert.ToInt32(row.ItemArray[3]));
            }
        break;
        }
    }
}

Cela peut être amélioré à 100%, mais cela fonctionne.


0 commentaires