反序列化XML文件

时间:2012-08-24 20:59:27

标签: c# xml serialization xml-serialization deserialization

我有一个包含4个不同字符串的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>

3 个答案:

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

答案 1 :(得分: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在很多情况下都比较容易,但我建议首先学习它,因为它可以处理所有事情并且效率从未降低。如果你先了解它,那么更糟糕的是你会做更多的工作而不是必要的工作,以获得比严格必要的更有效的东西(你将通过忽略更简单的方式进行微观优化)。如果你先了解其他人,那么更糟糕的是,你会做更多的工作而不是必要的工作,最终得到的效率低于所需的效率。

答案 2 :(得分: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();

        }
    }
}