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 Réponses :
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
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.
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.
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?