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

PowerShell读取解析JSON时无法转换System.Object[]值问题求助

问题原因及解决办法:PowerShell JSON数组转自定义类List

问题原因

ConvertFrom-Json解析JSON后,$json.groups返回的是PSCustomObject类型的数组,并非你定义的Group类实例数组。PowerShell不会自动将PSCustomObject隐式转换为自定义类对象,直接强制转换[List[Group]]会因类型不匹配失败。

解决办法

以下两种方法可实现正确转换:

方法一:手动遍历映射属性

using namespace System.Collections.Generic

class Group{
    [string]$name
}

$json = Get-Content -Raw -Path .\config.json | ConvertFrom-Json
$groups = [List[Group]]::new()
foreach ($g in $json.groups) {
    # 手动将PSCustomObject属性映射到Group实例
    $group = [Group]@{
        name = $g.name
    }
    $groups.Add($group)
}
Write-Output $groups

这种方式适合属性较多或需要自定义映射逻辑的场景,能精准控制每个属性的赋值。

方法二:管道结合类型转换

using namespace System.Collections.Generic

class Group{
    [string]$name
}

$json = Get-Content -Raw -Path .\config.json | ConvertFrom-Json
# 先将PSCustomObject转为Group实例,再转为List集合
$groups = [List[Group]] ($json.groups | ForEach-Object { [Group]$_ })
Write-Output $groups

如果JSON字段名和类属性名完全一致,可直接通过[Group]$_快速转换,代码更简洁。

注意事项

  • 若JSON中的字段名与类属性名不一致,必须手动指定映射关系(比如JSON字段是group_name,类属性是name,则需写成name = $g.group_name)。
  • 类中新增属性时,要同步在转换逻辑中添加对应属性的赋值,避免遗漏导致属性为空。

内容的提问来源于stack exchange,提问作者LeonidasFett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:40:26