J'ai mis en place une sérialisation/désérialisation xml pour enregistrer des données dans mon application. Je peux désérialiser des éléments non-array, mais quand je désérialise un tableau, il est vide. J'ai l'impression que le problème est dans la partie set de la propriété im essayant de sérialiser/désérialiser.C#: Comment accéder aux données d'un fichier xml désérialisé?
D'abord la classe que je suis en train de sérialisation:
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];
}
}
Le résultat de la sérialisation:
<?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>
Le code désérialisation:
_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();
}
Le code pour la lecture des données désérialisé:
for (int i = 0; i < _cf.LastOpen.Length; i++)
{
if (_cf.LastOpen[i] != null)
{
toolStripMenuItem1.DropDownItems.Add(_cf.LastOpen[i]);
recentState = true;
}
}
Avez-vous essayé d'utiliser une liste de * * au lieu? –
Stormenet
@Sotmenet - Les listes sont-elles mieux adaptées à la sérialisation? Je n'ai pas encore essayé. J'ai essayé un Arraylist, mais cela a échoué lamentablement. – Bildsoe
Non, cela ne fait pas de différence, mais cela pourrait être plus utile pour vous en tant qu'utilisateur. – leppie