【发布时间】:2010-11-29 11:05:47
【问题描述】:
是否可以通过 .NET 的配置 API 使用不可变类型作为配置属性?
假设我有一个名为 MyClass 的不可变类型:
public class ImmutableClass
{
private readonly int value;
public ImmutableClass(int value)
{
this.value = value;
}
public int Value
{
get { return this.value; }
}
}
我想将此类型用作 ConfigurationSection 中的配置属性:
public class MyConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("foo")]
public ImmutableClass Foo
{
get { return (ImmutableClass)base["foo"]; }
set { base["foo"] = value; }
}
}
执行此操作时,我无法序列化和反序列化 MyConfigurationSection,因为它会引发此异常:
System.Configuration.ConfigurationErrorsException:属性“criterion”的值无法转换为字符串。错误是:找不到支持'FindCriterion'类型的属性'criterion'的字符串转换的转换器。
如果我从 ConfigurationElement 派生 ImmutableClass,当我尝试序列化和反序列化配置部分时会出现此异常:
System.Reflection.TargetInvocationException:调用的目标已抛出异常。 ---> System.Reflection.TargetInvocationException:调用的目标已抛出异常。 ---> System.MissingMethodException: 没有为此对象定义无参数构造函数。
我可以完全控制 ImmutableClass,所以我可以实现任何需要的接口。
有什么方法可以挂钩到配置 API 以便 ImmutableClass 可以以这种方式使用?
【问题讨论】:
标签: c# .net configuration serialization