温莎城堡 - 作为 xml 中组件参数的复杂类型列表

本文关键字:参数 复杂 类型 列表 组件 城堡 作为 xml | 更新日期: 2023-09-27 18:36:40

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

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

温莎城堡 - 作为 xml 中组件参数的复杂类型列表

对于仍在寻找解决方案的人...我已经删除了系列的节点,它的工作(检查 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>

技术说明:似乎当它解析时,它已经知道它是通用列表,因此称为GenericListConverter.PerformConversion作为配置节点。PerformConversion正在调用ListHelper。将配置转换为集合并在树中传递子节点列表。

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

如果我们省略节点,则比ListHelper。ConvertConfigurationToCollection 接收 2 个子节点 - 正确解析的"项目"。

城堡的来源。

并链接到GenericListConverter.cs。