簡體   English   中英

C#:如何從反序列化的xml文件訪問數據

[英]C#: How do i access data from a deserialized xml-file

我已經設置了xml-serialization / deserialization以將數據保存在應用程序中。 我可以反序列化非數組元素,但是當我反序列化數組時,它為空。 我有一個預感,問題出在屬性的設置部分中,我試圖進行序列化/反序列化。

首先,我要序列化的類:

namespace kineticMold
{
    [Serializable()]
    public class Config
    {
        public Config() { }
        public string ComPort
        {
            get
            {
                return comPort;
            }
            set
            {
                comPort = value;
            }
        }

        [XmlArrayItem("recentFile")]
        public string[] LastOpen
        {

            get
            {
                return lastOpen;
            }
            set
            {

                    ArrayList holderList = new ArrayList();

                    holderList.Add(value);

                    for (int i = 0; i < 4; i++)
                    {

                        holderList.Add(lastOpen[i]);

                    }

                    lastOpen = (string[])lastOpen.ToArray<string>();



            }
        }

        private string comPort;
        private string[] lastOpen = new string[5];


    }
}

序列化的結果:

<?xml version="1.0" encoding="utf-8" ?> 
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ComPort>COM12</ComPort> 
    <LastOpen>
       <recentFile>test.xml</recentFile> 
       <recentFile xsi:nil="true" /> 
       <recentFile xsi:nil="true" /> 
       <recentFile xsi:nil="true" /> 
       <recentFile xsi:nil="true" /> 
    </LastOpen>
</Config>

反序列化的代碼:

_cf = new Config();
            XmlSerializer ser = new XmlSerializer(typeof(Config));

            if (File.Exists(settings_filepath))
            {
                FileStream fs = new FileStream(@settings_filepath, FileMode.Open);
                _cf = (Config)ser.Deserialize(fs);
                fs.Close();
            }

讀取反序列化數據的代碼:

 for (int i = 0; i < _cf.LastOpen.Length; i++)
            {

                if (_cf.LastOpen[i] != null)
                {
                    toolStripMenuItem1.DropDownItems.Add(_cf.LastOpen[i]);

                    recentState = true;
                }
            }

你有:

lastOpen = (string[])lastOpen.ToArray<string>();

您的意思是這里的holderList (在右側)嗎?

這是不完全清楚你想要的數據,但目前不保留任何項目從value超越制定者。 同樣, ArrayList在這里是多余的。 可能是List<string>

當然,甚至更簡單:

private readonly List<string> lastOpen = new List<string>();
[XmlArrayItem("recentFile")]
public List<string> LastOpen {get {return lastOpen;}}

(並讓調用代碼擔心其中要保留多少個項目)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM