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
相关产品推荐
相关产品推荐

