如何在ConfigurationSection中使用自定义类型的值?

时间:2017-07-12 12:04:12

标签: c# configurationsection

我们说我有Point2D类型(这是示例),我如何将此类型与ConfigurationSection一起使用 - 换句话说,有哪些方法我必须按顺序实现我的类型的值,从字符串创建。

一种方法是提供TypeConverter,还有另外一种方法吗?不引入额外类型,仅在我的自定义类型中(在此示例中为Point2D)?

另一种方式,但它更多的是一个技巧,例如,知道类型x的属性yint,然后提供creator属性来获取{ {1}} - 我不想走那条路。

更新:请求示例:

Point2D

你可以看到我为public sealed class MyConfig : ConfigurationSection { [ConfigurationProperty("LeftPoint", IsRequired = true), TypeConverter(typeof(Point2DTypeConverter))] public Point2D LeftPoint { get { return (Point2D )this["LeftPoint"]; } set { this["LeftPoint"] = value; } } ... } 使用了类型转换器并且它有效。没问题。但是我想知道是否可以在我的类型Point2D内进行转换(真正从字符串解析),这样我就可以删除整个转换器(不是作为属性标记,而是完全)。

2 个答案:

答案 0 :(得分:2)

由于这是一个可靠的要求,我建议使用Newtonsoft.Json转换为字符串和从字符串转换。

string MyPoint = Json.Serialize(MyPointObject)

Point2d MyPoint = Json.Deserialize(ConfigurationSection..)

您也可以通过创建自定义ConfigurationSections来抽象序列化逻辑,如下所述:How:To Create Custom ConfigurationSections

答案 1 :(得分:2)

TypeConverter以某种形式需要

ConfigurationProperty。如果您没有提供 - 如果有必要,它会TypeDescriptor.GetConverter查找。为了使用它,您的类型本身应该使用TypeConverter属性进行修饰,因此您无法以这种方式摆脱它(尽管您可以将转换的责任转移到类型本身)。您也可以使用泛型TypeConverter,但为此需要将目标类型传递给它,这是使用ConfigurationProperty属性无法实现的(但如果手动配置属性,则可以不使用属性)。总而言之 - 总是涉及TypeConverter。