如何读取 XML 文件并将信息放入对象中?

Posted

技术标签:

【中文标题】如何读取 XML 文件并将信息放入对象中?【英文标题】:How can I read an XML File and put the info in objects? 【发布时间】:2020-10-07 07:03:25 【问题描述】:

我有一个函数可以将我在列表中的所有对象信息写入 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 iddouble balance

【问题讨论】:

这能回答你的问题吗? How to Deserialize XML document 我试过了,但是没用。 “它没用”是并且永远不会是对问题的准确描述。 为什么不起作用?你试过什么?有错误信息吗?您能否提供给我们和minimal reproducible example,以便我们重现您的问题? 【参考方案1】:

我已经找到以下解决方案:

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% 改进,但它是有效的。

【讨论】:

【参考方案2】:

要根据您的实际解决方案给出答案,您应该使用XmlReader 作为XmlWriter 的对应项。对于字符串以外的每个属性类型,您应该使用Convert 或适当的TryParse 方法。但是您可能会查看 XmlSerializer,它正好针对您的用例。

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

【讨论】:

【参考方案3】:

您还必须将 o jet 的每个部分标记为 xml 属性,以便将对象序列化为 xml。然后,您可以使用 xml 阅读器遍历 xml 目录中的文件并反序列化它们。我相信有一个 nuget 包可以帮助解决这个问题。

【讨论】:

以上是关于如何读取 XML 文件并将信息放入对象中?的主要内容,如果未能解决你的问题,请参考以下文章

Java - 如何读取json文件并将值放入数组中

如何按整数读取文件整数并将它们放入二维数组?

如何使用 lua 读取文件夹名称并将它们放入表列表中

从 URL 读取 XML 文件并将数据保存在 Web 的数据库中 - 如何自动化该过程?

如何使用 EMF 读取 XML 文件?

读取 .txt 文件并将每一行放入向量中