2012-08-24 141 views
2

我有一個包含4名不同的字符串的XML文件,但我無法反序列化文件。有人可以幫助我嗎?反序列化XML文件

我在網上找了答案,但他們沒有工作,我不知道該怎麼辦纔好。

這裏是我嘗試反序列化的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<saveData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<strFolder1>1st Location</strFolder1> 
<strFolder2>2nd Location</strFolder2> 
<strTabName>newTab0</strTabName> 
<strTabText>Main</strTabText> 
</saveData> 
+1

XML看起來像......並且您想將其反序列化爲類似於...的類的對象? –

+0

什麼沒有工作?你現在要求人們重複你已經知道的答案。 –

+0

我能夠創建文件,但我不知道如何反序列化 –

回答

1

我建議在看XmlReader。其他一些方法以不同的方式更容易,但您可以從XmlReader構建任何內容。如:

while(rdr.Read()) 
    if(rdr.NodeType == XmlNodeType.Element) 
    switch(rdr.LocalName) 
    { 
     case "strFolder1": 
     strFolder1 = rdr.ReadContentAsString(); 
     break; 
     case "strFolder2": 
     strFolder2 = rdr.ReadContentAsString(); 
     break; 
     case "strTabName": 
     strTabName = rdr.ReadContentAsString(); 
     break; 
     case "strTabText": 
     strTabText = rdr.ReadContentAsString(); 
     break; 
    } 

(如保證排序,我們可以採取一些捷徑,我做到了硬盤的方式來顯示硬盤的方式並不難)。

使用XmlDocument的,XmlSerializer的和的XDocument在很多情況下更容易,但我建議先學這個,因爲它會處理一切,絕不是低效率的。如果你首先了解它,那麼會發生的更糟糕的是,你做了一些比必要的工作更多的工作,最終得到的是比絕對必要的效率更高的效率(你會因忽視更簡單的方法而進行微觀優化)。如果你先學習別人,那麼會發生的更糟糕的是,你做了很多工作,而不是必要的,最終導致效率低於需求。

+0

謝謝你,我真的很喜歡學習的東西越難方式,因爲像你說的往往是更高效,它通常給你的你實際上是在做什麼更好的把握。 –

+0

是的。我想說,我對知識的渴望意味着學習更高層次的方法從來沒有阻止我在需要的時候學習更低層次的知識,但是如果我做到了,我會成爲完全的騙子!當然,也要學習其他方法。 –

2
var ser = new XmlSerializer(typeof(saveData)); 
var obj = (saveData)ser.Deserialize(stream); 

public class saveData 
{ 
    public string strFolder1; 
    public string strFolder2; 
    public string strTabName; 
    public string strTabText; 
} 
0
namespace Cars1 
{ 

    public class saveData 
    { 
     public string strFolder1; 

     public string strFolder2; 

     public string strTabName; 

     public string strTabText; 

    } 


    [Serializable] 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      saveData obj = new saveData(); 

      FileStream fopen = new FileStream("abc.xml", FileMode.Open); 
      XmlSerializer x = new XmlSerializer(obj.GetType()); 
      StreamReader read_from_xml = new StreamReader(fopen); 
      obj = (saveData)x.Deserialize(read_from_xml); 

      Console.WriteLine(obj.strFolder1 + "=>" + obj.strFolder2 + "=>" + obj.strTabName+"=>"+obj.strTabText); 
      Console.ReadKey(); 

      fopen.Close(); 

     } 
    } 
}