【问题标题】:How to store and retrieve objects from Xml file如何从 Xml 文件中存储和检索对象
【发布时间】:2015-11-03 14:41:19
【问题描述】:

我有这门课:

public class MyMenu
{
    public string Name { get; set; }
    public string Type { get; set; }
}

这个类我想在动态菜单中使用它,并且我不想将他的数据存储在数据库中。

我想将其数据存储在Xml 文件中。

到目前为止,我有这个用于保存数据:

string path = Server.MapPath("~/Content/Files");
XmlSerializer serial = new XmlSerializer(model.GetType());
System.IO.StreamWriter writer = new System.IO.StreamWriter(path + "\\ribbonmenu");
serial.Serialize(writer, model);
writer.Close();

这是获取数据:

string path = Server.MapPath("~/Content/Files");
XmlSerializer serial = new XmlSerializer(typeof(RibbonMenu));
System.IO.StreamReader reader = new System.IO.StreamReader(path + "\\ribbonmenu");          
RibbonMenu menu =(RibbonMenu) serial.Deserialize(reader);
reader.Close();

我所拥有的是为一个对象工作以保存和获取。 我需要保存多个对象,并获取对象的集合,例如:

IEnumerable<MyMenu> model=(IEnumerable<MyMenu>) serial.Deserialize(reader);

谁能给我一个解决方案?谢谢。

编辑:用我的代码生成的Xml的内容是:

<?xml version="1.0" encoding="utf-8"?>
<MyMenu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Id>0</Id>
  <Menu>Home</Menu>
  <Type>Button</Type>

</MyMenu>

【问题讨论】:

  • 你看thisthat了吗?
  • 很难说没有看到 XML 的样子
  • 1.我在序列化代码中了解 model.GetType() -> model 是单个 MyMenu 项,因此您必须在此处有一个集合,否则它自然会反序列化为单个项。 2. 您是否手动编写了此 XML?开始标签与结束标签不匹配。 (菜单 -> 操作,类型 -> 控制器)
  • 1.是的,是单身; 2,是的,我试图扩展模型,我复制并粘贴了错误的文件。现在很清楚,如何使它工作。谢谢。
  • 我发布了一个答案。问题中不清楚 RibbonMenu 类是什么。所以如果你也需要那个,我可以修改我的答案

标签: c# .net xml asp.net-mvc


【解决方案1】:

序列化时你应该像这样初始化一个集合:

var model = new List<MyMenu>()
{
    new MyMenu() { Name = "Menu1", Type = "Ribbon" },
    new MyMenu() { Name = "Menu2", Type = "Ribbon" },
};

这样,当你序列化时,你会得到这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMyMenu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyMenu>
    <Name>Menu1</Name>
    <Type>Ribbon</Type>
  </MyMenu>
  <MyMenu>
    <Name>Menu2</Name>
    <Type>Ribbon</Type>
  </MyMenu>
</ArrayOfMyMenu>

你可以通过使用 List 作为序列化器的类型来取回对象:

XmlSerializer serial = new XmlSerializer(typeof(List<MyMenu>));
System.IO.StreamReader reader = new System.IO.StreamReader("ribbonmenu.xml");
var menu = (List<MyMenu>)serial.Deserialize(reader);
reader.Close(); 

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2011-07-26
    • 2021-12-23
    相关资源
    最近更新 更多