Export-Clixml将通用列表转换为标准数组

时间:2014-05-09 22:18:22

标签: arrays powershell generic-list

我在脚本中使用Collections.Generic.List[object]而不是PowerShell数组,以便拥有" .add()"而且由于速度(列表非常大)。

当我通过Export-Clixml导出列表并再次重新导入时,它不再是通用列表;它是一个标准数组," .add()"不再有用了。

奇怪(或不是),当我将另一个通用列表对象放在第一个通用列表对象中时,它在导出导入过程中幸存下来。 为什么以及如何解决这个问题?

$list = New-Object System.Collections.Generic.List[object]
$entry = New-Object Psobject -Property @{
    Test = "1"
    Sublist = (New-Object System.Collections.Generic.List[object])
}
$list.add($entry)

$list | Export-Clixml D:\text.xml
$newlist = import-clixml D:\text.xml


# Produces this export:

*<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>System.Management.Automation.PSCustomObject</T>
      <T>System.Object</T>
    </TN>
    <MS>
      <S N="Test">1</S>
      <Obj N="Sublist" RefId="1">
        <TN RefId="1">
          <T>System.Collections.Generic.List`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]</T>
          <T>System.Object</T>
        </TN>
        <LST />
      </Obj>
    </MS>
  </Obj>
</Objs*>

1 个答案:

答案 0 :(得分:3)

管道正在为你做这件事。管道将“展开”数组和集合,但多个返回总是重新组装成数组。 arraylist中的arraylist可以工作,因为它只展开一层深,所以第一个(外部)arraylist被“展开”而第二个(内部)arraylist完整地通过了。

以这种方式尝试:

Export-Clixml -InputObject $list -Path d:\text.xml