1

我的 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; }
}

如何让温莎城堡正确填充系列列表?

4

1 回答 1

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>

技术说明:似乎在解析 <Series> 时它已经知道它是通用列表,因此称为GenericListConverter.PerformConversion以 <Series> 作为配置节点。并且PerformConversion正在调用ListHelper<T>.ConvertConfigurationToCollection并传递树中的子节点列表。

因此,当我们将项目包装在 <list> 中时,它会作为具有单个项目“列表”的集合处理(并且没有直接的子节点具有 id 和 name 的值,因此使用默认值)。

如果我们省略 <list> 节点,则 ListHelper<T>.ConvertConfigurationToCollection会收到 2 个子节点 - 正确解析的“项目”。

城堡的来源

并链接到GenericListConverter.cs

于 2014-01-20T14:12:02.730 回答