我们说我有Point2D
类型(这是示例),我如何将此类型与ConfigurationSection
一起使用 - 换句话说,有哪些方法我必须按顺序实现我的类型的值,从字符串创建。
一种方法是提供TypeConverter
,还有另外一种方法吗?不引入额外类型,仅在我的自定义类型中(在此示例中为Point2D
)?
另一种方式,但它更多的是一个技巧,例如,知道类型x
的属性y
和int
,然后提供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
内进行转换(真正从字符串解析),这样我就可以删除整个转换器(不是作为属性标记,而是完全)。
答案 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。