2015-11-03 133 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(); 

希望這有助於。