我有一个XML配置文件,如下所示:
<register type='MyType'>
<constructor>
...
<param name='myString' value='null'/>
...
</constructor>
</register>
如何将字符串"null"
转换为null
值?
我已尝试指定value=''
但我收到错误:
属性值必须存在且非空。
并尝试了<param name='myString'/>
,它给出了错误
无法构造String类型。您必须配置容器以提供此值。
最后(这是this page似乎建议的那样)
<instance name='myStringVal' />
<register type='MyType'>
<constructor>
...
<param name='myString' dependencyName='myStringVal'/>
...
</constructor>
</register>
引发ArgumentNullException
修改,现在我也尝试了optional
代码
<register type='MyType'>
<constructor>
...
<param name='myString'>
<optional />
</param>
...
</constructor>
</register>
这也会引发ArgumentNullException
答案 0 :(得分:1)
我不相信XML具有真正的NULL值。您是否考虑过使用xsi:nil
属性?
答案 1 :(得分:1)
您可以使用类型转换器将配置中的字符串转换为空字符串。 Unity不会让你把空字符串作为配置中的值,所以不幸的是,类型转换器必须使用&#34;魔术字符串&#34;识别空值:
<register type="MyClass" >
<constructor>
<param name="configValue" value="null" typeConverter="NullStringConverter" />
</constructor>
</register>
在上面的&#34; null&#34;是类型转换器将寻找的神奇字符串:
public class NullStringConverter : System.ComponentModel.TypeConverter
{
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
if (value == null ||
(value.GetType() == typeof(string) &&
String.Compare(value.ToString(), "null", StringComparison.OrdinalIgnoreCase) == 0))
{
return null;
}
return value.ToString();
}
}