这是我想要做的:
- 具有应用程序范围的设置设置,其值是自定义类型的数组
- 将自定义类型的数组序列化为 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 来表示数组。(我通过编写一个以编程方式构建数组然后使用XmlSerializer
. .config。
这是有问题的,因为我希望人们能够在 app.config 中以 XML 形式查看属性值,并且能够在需要时更改它们。如果它不是从 app.config 写入和读取的,则它不是运行时可配置的。
如果我在 app.config 下手动创建一个条目applicationSettings
,并在我的序列化数组中输入设置值,设置设计器会询问我是否要更新设置文件值,然后这样做 - 但删除了我输入的条目在下applicationSettings
。
如有必要,我愿意考虑为我的自定义类型编写某种设计器,但我不知道那会是哪种设计器。
(我知道如果我只是将属性类型更改为“字符串”,我可以将序列化的 XML 保存为字符串并避免整个问题。但我想要的是一个类型是我的自定义类型的属性,而不是我想要的重组。)
谁能告诉我如何使用自定义类型实现本文顶部的三个目标?
非常感谢。