You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell使用Import-Clixml加载List<T>泛型列表出现类型转换错误求解

问题根因
  • 管道枚举展开:你使用$this.Dedis | Export-Clixml序列化时,PowerShell会自动展开泛型列表的所有元素,存储的是独立的DediInfo对象数组而非整个List实例,因此Import-Clixml返回的是System.Object[]类型,无法直接赋值给List<DediInfo>属性。
  • 自定义类类型丢失:PowerShell原生序列化/反序列化不会自动将通用反序列化结果绑定到你自定义的DediInfo类,返回的都是通用对象,需要显式做类型转换。
可行解决方案

方案1:保留CliXml存储(适配你原有实现逻辑)

直接修改SaveInfo和LoadInfo方法即可:

class DediInfo {
    [string]$ServiceName
    [int]$QueryPort

    DediInfo([string]$servicename, [int]$qPort){
        $this.ServiceName = $servicename
        $this.QueryPort = $qPort
    }
}

class DediInfos {
    hidden static [DediInfos] $_instance = [DediInfos]::new()
    static [DediInfos] $Instance = [DediInfos]::GetInstance()
    [System.Collections.Generic.List[DediInfo]]$Dedis = [System.Collections.Generic.List[DediInfo]]::New()

    hidden static [DediInfos] GetInstance() {
        return [DediInfos]::_instance
    }

    [void]SaveInfo(){
        # 不使用管道传递,通过InputObject参数传入完整List实例,避免枚举展开
        Export-Clixml -Path "D:\test.xml" -InputObject $this.Dedis
    }

    [void]LoadInfo() {
        $importedData = Import-Clixml -Path "D:\test.xml"
        # 显式转换为DediInfo数组后构造泛型列表
        $this.Dedis = [System.Collections.Generic.List[DediInfo]]::new([DediInfo[]]$importedData)
    }

}

方案2:使用Json存储(兼容性更强,避免序列化类型绑定问题)

兼容性更好,适配PowerShell 5.1和所有7.x版本,实现更稳定:

[void]SaveInfo(){
    $this.Dedis | ConvertTo-Json | Set-Content "D:\test.json" -Encoding UTF8
}

[void]LoadInfo() {
    $importedData = Get-Content "D:\test.json" -Raw -Encoding UTF8 | ConvertFrom-Json
    $this.Dedis = [System.Collections.Generic.List[DediInfo]]::new()
    # 遍历显式构造DediInfo实例,保证类型正确
    foreach ($item in $importedData) {
        $this.Dedis.Add([DediInfo]::new($item.ServiceName, $item.QueryPort))
    }
}

两种方案都可以直接运行通过,你原来的测试代码无需其他修改即可正常实现List的持久化和还原。

内容的提问来源于stack exchange,提问作者вʀaᴎᴅᴏƞ вєнᴎєƞ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:36:08