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

时间:2013-02-13 22:19:38

标签: c# visual-studio-2010 designer typeconverter settings.settings

这就是我想要做的事情:

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

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

我有自定义类型:

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

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

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

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

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

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

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

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

非常感谢。

0 个答案:

没有答案