反序列化XML文件

问题描述:

我有一个包含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

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

我建议在看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

是的。我想说,我对知识的渴望意味着学习更高层次的方法从来没有阻止我在需要的时候学习更低层次的知识,但是如果我做到了,我会成为完全的骗子!当然,也要学习其他方法。 –

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; 
} 

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

     } 
    } 
}