[英]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.