2010-05-03 10 views
2

Pour une raison quelconque, je n'arrive pas à stocker un tableau de ma classe dans les paramètres. Voici le code:Comment stocker un tableau d'un type particulier dans mon fichier de paramètres?

  var newLink = new Link(); 
      Properties.Settings.Default.Links = new ArrayList(); 
      Properties.Settings.Default.Links.Add(newLink); 
      Properties.Settings.Default.Save(); 

Dans mes Settings.Designer.cs j'ai spécifié le champ d'une liste de tableau:

[global::System.Configuration.UserScopedSettingAttribute()] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    public global::System.Collections.ArrayList Links { 
     get { 
      return ((global::System.Collections.ArrayList)(this["Links"])); 
     } 
     set { 
      this["Links"] = value; 
     } 
    } 

Pour une raison quelconque, il ne sauvera pas l'une des données même si la classe Link est sérialisable et je l'ai testé.

+1

"Je ne peux pas sembler" Comment voyez-vous cela? Une exception est-elle levée? La liste est-elle vide lors du chargement? Est-ce qu'il est vide sans rechargement? – Foxfire

+0

La liste est vide sans exception levée. D'une certaine manière, il ne s'agit pas de sérialiser mes liens. –

+0

Est-ce que les données contenues dans le fichier de paramètres (c'est un fichier XML, donc vous pouvez facilement vérifier)? – Foxfire

Répondre

3

J'ai trouvé la source du problème. Simplement en utilisant un tableau simple ne le coupera pas. Après réflexion, le désérialiseur ne sait pas de quel type désérialiser les éléments du tableau. J'ai échoué à voir que le tableau requis typage fort. Le concepteur me porte à croire bêtement c'était un tableau générique simple:

[global::System.Configuration.UserScopedSettingAttribute()] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    public List<Link> Links 
    { 
     get { 
      return ((List<Link>)(this["Links"])); 
     } 
     set { 
      this["Links"] = value; 
     } 
    } 

je devais faire ces changements dans les Settings.Designer.cs et non du concepteur.

+0

Merci, cette réponse m'a juste aidé une tonne! – Evan

1

Assurez-vous que votre classe Link est correctement sérialisable au format XML ou qu'elle a un convertisseur de caractères à chaîne (ce qui est préférable lorsque vous utilisez des fichiers application.settings).

Je suppose que quelque chose dans vos types ne se transformera pas dans le format de sérialisation XML. Et votre user.config montre qu'il n'a aucune chaîne typeconverter disponible.