2

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

3 回答 3

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;
}
于 2012-08-24T21:08:59.747 回答
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 更容易,但我建议先学习这一点,因为它可以处理所有事情,而且效率永远不会降低。如果您首先学习它,那么更糟糕的是,您做了比必要的工作更多的工作,最终得到比严格必要的更有效的东西(由于对更简单方法的无知,您将进行微优化)。如果您先了解其他人,那么更糟糕的是,您做的工作比必要的要多得多,最终得到的效率比所需的要低得多。

于 2012-08-24T21:16:28.343 回答
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();

        }
    }
}
于 2012-08-27T10:13:25.040 回答