Mar*_*ann 6 .net c# configuration serialization
是否可以将不可变类型用作.NET配置API的配置属性?
假设我有一个名为MyClass的不可变类型:
public class ImmutableClass
{
private readonly int value;
public ImmutableClass(int value)
{
this.value = value;
}
public int Value
{
get { return this.value; }
}
}
Run Code Online (Sandbox Code Playgroud)
我想在ConfigurationSection中使用此类型作为配置属性:
public class MyConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("foo")]
public ImmutableClass Foo
{
get { return (ImmutableClass)base["foo"]; }
set { base["foo"] = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我无法序列化和反序列化MyConfigurationSection,因为它会抛出此异常:
System.Configuration.ConfigurationErrorsException:属性"criterion"的值无法转换为字符串.错误是:无法找到支持转换为/来自字符串的转换器,用于"FindCriterion"类型的属性"标准".
如果我从ConfigurationElement派生ImmutableClass,当我尝试序列化和反序列化配置部分时,我得到此异常:
System.Reflection.TargetInvocationException:调用目标抛出了异常.---> System.Reflection.TargetInvocationException:调用目标抛出了异常.---> System.MissingMethodException:没有为此对象定义的无参数构造函数.
我完全控制了ImmutableClass,所以我可以实现任何需要的接口.
有什么方法可以挂钩到配置API,以便可以这种方式使用ImmutableClass?
小智 1
您也许可以使用一些TypeConverters来帮助完成此过程(链接到 System.Configurations.ConfigurationConverter)。
真正的问题是你为什么要给自己惹这么多麻烦?只是有些时候,退缩并接受它比奋起反抗更好。如果您尝试以除为您指定的特定方式之外的任何方式进行操作,框架的某些部分会令人沮丧......