如何读取 XML 文件并将信息放入对象中?
How can I read an XML File and put the info in objects?
我有一个函数,可以将列表中所有对象的信息写入 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();
}
现在,当程序关闭时,所有数据仍在文件中。因此一旦程序再次启动,它应该再次创建所有旧对象(创建一个 Account
对象会自动将其放入列表中)。
谁能告诉我这怎么可能?
请注意 int id
和 double balance
。
要根据您的实际解决方案给出答案,您应该使用 XmlReader
作为 XmlWriter
的对应项。对于字符串以外的每个 属性 类型,您应该使用 Convert
或适当的 TryParse
方法。但是您可以看看 XmlSerializer
,它正好针对您的用例。
https://docs.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlserializer?view=netcore-3.1
您还必须将 o jet 的每个部分标记为 xml 属性,以便将对象序列化为 xml。然后你可以循环遍历 xml 目录中的文件并使用 xml reader 反序列化它们。我相信有一个 nuget 包可以帮助解决这个问题。
我得出以下解决方案:
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;
}
}
}
这可以 100% 改进,但它确实有效。
我有一个函数,可以将列表中所有对象的信息写入 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();
}
现在,当程序关闭时,所有数据仍在文件中。因此一旦程序再次启动,它应该再次创建所有旧对象(创建一个 Account
对象会自动将其放入列表中)。
谁能告诉我这怎么可能?
请注意 int id
和 double balance
。
要根据您的实际解决方案给出答案,您应该使用 XmlReader
作为 XmlWriter
的对应项。对于字符串以外的每个 属性 类型,您应该使用 Convert
或适当的 TryParse
方法。但是您可以看看 XmlSerializer
,它正好针对您的用例。
https://docs.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlserializer?view=netcore-3.1
您还必须将 o jet 的每个部分标记为 xml 属性,以便将对象序列化为 xml。然后你可以循环遍历 xml 目录中的文件并使用 xml reader 反序列化它们。我相信有一个 nuget 包可以帮助解决这个问题。
我得出以下解决方案:
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;
}
}
}
这可以 100% 改进,但它确实有效。