自定义类型和设置设计器:设计器不会将设置值写入app.config

Ann*_* L. 5 c# designer typeconverter visual-studio-2010 settings.settings

这就是我想要做的事情:

  • 具有应用程序范围的"设置"设置,其值为自定义类型的数组
  • 将自定义类型的数组序列化为XML而不是字符串
  • 将我的设置的序列化值保存在app.config中.

到目前为止,这是在逃避我.

我有一个自定义类型:

[TypeConverter(typeof(ServiceConfigurationConverter))]
[Serializable]
public class ServiceConfiguration
{
    public string Name { get; set; }
    public string Url { get; set; }
    // more
}
Run Code Online (Sandbox Code Playgroud)

它有一个自定义TypeConverter,可以从字符串来回转换它.我这样编写它是因为我发现的示例都是为了转换为字符串,因为如果它意味着我的值被保存到app.config,我会愿意序列化为字符串.但正如我们将要看到的,它们不是.

如果我指示(通过直接编辑Settings.settings文件)该设置的类型MyNamespace.ServiceConfiguration[],我可以手动输入XML来表示数组.(我通过编写一个以编程方式构建数组的测试来获取XML,然后使用它进行序列化XmlSerializer.)但是,虽然这个XML在Settings.designer.cs中设置为设置的默认值,但它不会保存到app的.config.

这是有问题的,因为我希望人们能够在app.config中以XML格式查看属性值,并且能够在需要时更改它们.如果它没有从app.config中写入和读取,则它不是运行时可配置的.

如果我在app.config中手动创建一个条目applicationSettings,然后在我的序列化数组中输入作为设置的值,设置设计器会询问我是否要更新设置文件值,并且这样做 - 但是删除了我放入的条目在下applicationSettings.

如果有必要,我愿意考虑为我的自定义类型编写某种设计师,但我不知道会是什么样的设计师.

(我知道如果我只是将属性类型更改为"string",我可以将序列化的XML保存为字符串并避免这个问题.但我想要的是一个属性,其类型是我的自定义类型,而不是我有的重建.)

任何人都可以告诉我如何使用自定义类型在这篇文章的顶部实现三个目标?

非常感谢.