ASP.NET中的自定义类型应用程序设置

刚才我遇到了可以处理复杂类型的.NET WinForms中的ApplicationSettings。
目前我在我的ASP.NET WebForms中使用AppSettings,它只能处理字符串。
我可以在Webforms中使用ApplicationSettings吗? 如果是这样的话?

基本理念:

  1. 在另一个项目中,创建将保留自定义设置的类。 例如:

    public class EndPoint { public string HostName { get; set; } public int Port { get; set; } } public class EndPointCollection : Collection { } 
  2. 构建包含类的项目。

  3. 转到 项目属性 ”中的“设置”选项卡。 它会说还没有设置文件,并询问您是否要创建它。

  4. 添加新的设置文件。 在类型字段中,选择“ 浏览”并键入完整的类名。 例如: ClassLibrary.EndPointCollection 。 保存并重建项目。

  5. 点击设置值的编辑按钮。 (请注意,如果在前一步中创建的类位于同一项目中,则无法使用此选项。)使用UI编辑设置。

    Visual Studio的设置值编辑器

  6. 如果打开web.config / app.config文件,您将看到如下内容:

     ...       MyHostName 12345   MyHost1 1212       ... 
  7. 最后,要从代码中读取这些设置,只需使用即可

     var endPointCollection = Settings.Default.MyEndPoints; 

    设计师将在幕后创建强类型对象以允许上述工作。 您可以在Settings.Designer.cs文件中查看完整的详细信息。

底线:您可以进行各种自定义类型设置,只要这些设置具有XmlSerializable或具有类型转换器。 此技术适用于Web应用程序,WinForms,WPF,控制台应用程序等。

以下是已接受答案的变体,使用以下用户定义的类来表示设置:

 namespace MyApplication { public class EndPoint { public string HostName { get; set; } public int Port { get; set; } } } 

接受的答案建议使用专门的集合类EndPointCollection来保存设置。 但是,我不认为这是必要的; 数组类型( EndPoint[] )似乎也可以工作。

但是,在类型浏览器中键入数组类型不起作用; 您可以直接在.settings文件中指定类型(使用文本编辑器):

    

此外,如果接受的答案中显示的值编辑器不可用,您可以使用XML直接在值字段中键入值:

   MyHostName 12345   MyHost1 1212   

使用上述XML将其值设置为复杂值的设置。

请注意,Visual Studio生成的XML名称空间声明在XML中不是必需的,如上所示。