2015-11-03 137 views
1

对象我有这个类:如何存储和检索xml文档

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> 
+0

你看过[this](http://stackoverflow.com/questions/1212742/xml-serialize-generic-list-of-serializable-objects)和[that](http://stackoverflow.com/问题/ 178899 /序列化 - 列出-的类到XML)? – Kilazur

+0

很难说没有看到什么XML看起来像 –

+1

1.我理解在序列化代码模型.GetType() - >模型是一个单一的MyMenu项目,所以你必须在这里有一个集合,否则它会自然地反序列化为一个单一的项目。 2.您是否手动编写此XML?打开标签与关闭标签不匹配。 (菜单 - >动作,类型 - >控制器) –

回答

0

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

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> 

而且你可以通过使用列表返回对象序列化程序的类型:

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(); 

希望这有助于。