2010-05-03 77 views
2

出于某种原因,我似乎无法将我的课程数组存储到设置中。下面的代码:如何将特定类型的数组存储到我的设置文件中?

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

在我Settings.Designer.cs我指定的字段是一个数组列表:

[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; 
     } 
    } 

出于某种原因,它不会保存任何数据,即使Link类是可序列化的,我已经测试过它。

+1

“我看起来不像”你怎么看?抛出异常吗?加载时列表是否为空?没有重新加载是空的? – Foxfire 2010-05-03 23:52:36

+0

列表是空的,没有抛出异常。不知何故,它不会序列化我的链接。 – 2010-05-03 23:54:04

+0

数据是否包含在设置文件中(这是一个XML文件,因此您可以轻松检查)? – Foxfire 2010-05-03 23:56:24

回答

3

我发现问题的根源。简单地使用普通数组不会削减它。想到它之后,反序列化器就不知道用什么类型来反序列化数组项。我没有看到阵列需要强大的输入。设计师使我愚蠢地认为这是一个普通的通用阵列:

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

我不得不做出的Settings.Designer.cs而不是从设计师的这些变化。

+0

谢谢,那个答案帮了我大忙! – Evan 2011-10-07 00:51:57

1

请确保您的链接类是正确的XML序列化或它有一个字符串的typeconverter(当使用application.settings文件时,这是首选)。

我会假设你的类型中的东西不会转换成XML序列化格式。而你的user.config显示它没有任何可用的字符串类型转换器。

相关问题