如何在 ConfigurationSection 中使用自定义类型的值?
How can I use values of custom type in ConfigurationSection?
假设我有 Point2D
类型(这是 example),我如何将此类型与 ConfigurationSection
一起使用——换句话说,什么为了从字符串创建我的类型的值,我必须实现的方法。
一种方法是提供TypeConverter
,还有其他方法吗?在不引入额外类型的情况下,仅在我的自定义类型中(在此示例中 Point2D
)?
另一种方法,但它更像是一个技巧,例如具有已知类型 int
的属性 x
和 y
,然后提供创建者属性 得到 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
使用了类型转换器并且它有效。没问题。但是我想知道是否可以在我的类型 Point2D
中进行转换(真正从字符串解析),这样我就可以删除整个转换器(不是作为属性标记,而是完全删除)。
由于这是一个可靠的要求,我建议使用 Newtonsoft.Json 与字符串相互转换。
string MyPoint = Json.Serialize(MyPointObject)
Point2d MyPoint = Json.Deserialize(ConfigurationSection..)
您还可以通过创建自定义 ConfigurationSections
来抽象您的序列化逻辑,如下所述:How:To Create Custom ConfigurationSections
对于 ConfigurationProperty
,TypeConverter
需要一种或另一种形式。如果您不提供 - 如有必要,它将使用 TypeDescriptor.GetConverter
查找。为此,你的类型本身应该用 TypeConverter
属性装饰,所以你不能以这种方式摆脱它(尽管你可以将转换的责任转移到类型本身)。您也可以使用泛型 TypeConverter
,但为此您需要将目标类型传递给它,这使用 ConfigurationProperty
属性是不可能的(但如果您手动配置属性而不使用属性,则可以)。总而言之 - 总是涉及 TypeConverter。
假设我有 Point2D
类型(这是 example),我如何将此类型与 ConfigurationSection
一起使用——换句话说,什么为了从字符串创建我的类型的值,我必须实现的方法。
一种方法是提供TypeConverter
,还有其他方法吗?在不引入额外类型的情况下,仅在我的自定义类型中(在此示例中 Point2D
)?
另一种方法,但它更像是一个技巧,例如具有已知类型 int
的属性 x
和 y
,然后提供创建者属性 得到 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
使用了类型转换器并且它有效。没问题。但是我想知道是否可以在我的类型 Point2D
中进行转换(真正从字符串解析),这样我就可以删除整个转换器(不是作为属性标记,而是完全删除)。
由于这是一个可靠的要求,我建议使用 Newtonsoft.Json 与字符串相互转换。
string MyPoint = Json.Serialize(MyPointObject)
Point2d MyPoint = Json.Deserialize(ConfigurationSection..)
您还可以通过创建自定义 ConfigurationSections
来抽象您的序列化逻辑,如下所述:How:To Create Custom ConfigurationSections
ConfigurationProperty
,TypeConverter
需要一种或另一种形式。如果您不提供 - 如有必要,它将使用 TypeDescriptor.GetConverter
查找。为此,你的类型本身应该用 TypeConverter
属性装饰,所以你不能以这种方式摆脱它(尽管你可以将转换的责任转移到类型本身)。您也可以使用泛型 TypeConverter
,但为此您需要将目标类型传递给它,这使用 ConfigurationProperty
属性是不可能的(但如果您手动配置属性而不使用属性,则可以)。总而言之 - 总是涉及 TypeConverter。