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 に答える