我的xml配置文件中有一个组件,它包含一系列菜单项。这很好用,每个菜单项都适当填充其值。
其中一个值chart是一个复杂类型,它本身包含两个字符串和一个复杂类型列表。图表中的列表未正确填充,并且始终包含一个元素,其属性都设置为其默认值。
这是我的xml文件的参数部分:
<menuItems>
<array>
<item>
<id>1</id>
<chart>
<title>Chart Title</title>
<series>
<list>
<item>
<id>1</id>
<name>Series Title</name>
</item>
</list>
</series>
</chart>
</item>
</array>
</menuItems>
我的相关课程:
[Convertible]
public class QueryMenuItem
{
public int Id { get; set; }
public Chart Chart { get; set; }
}
[Convertible]
public class Chart
{
public string Title{ get; set; }
public IList<ChartSeries> Series { get; set; }
}
[Convertible]
public class ChartSeries
{
public int Id { get; set; }
public string Name { get; set; }
}
如何让Castle Windsor正确填充系列列表?
答案 0 :(得分:0)
对于那些仍在寻找解决方案的人......我已经删除了Series的节点并且它正常工作(检查3.2.0.0):
<menuItems>
<array>
<item>
<id>1</id>
<chart>
<title>Chart Title</title>
<Series>
<item>
<id>1</id>
<name>Series Title</name>
</item>
<item>
<id>2</id>
<name>Series Title2</name>
</item>
</Series>
</chart>
</item>
</array>
</menuItems>
技术说明:在解析&lt; Series&gt;时似乎它已经知道它是通用列表,所谓的 GenericListConverter.PerformConversion 与&lt; Series&gt;作为配置节点。并且 PerformConversion 正在调用 ListHelper&lt; T&gt; .ConvertConfigurationToCollection 并传递树中子节点的列表。
因此,如果我们将项目包装在&lt; list&gt;中它被处理为具有单个项目“list”的集合(并且没有具有id和name值的直接子节点,因此使用默认值。)
如果我们省略&lt; list&gt;节点,而不是 ListHelper&lt; T&gt; .ConvertConfigurationToCollection 接收2个子节点 - 正确解析的“项目”。