PowerShell自定义对象转JSON时嵌套数组属性被序列化为字符串问题
问题根因
PowerShell 内置的 ConvertTo-Json cmdlet 默认的对象序列化深度为2层,你构造的$newAccountData对象嵌套层级超过了默认阈值:
- 第1层:
$newAccountData本身的属性(path、manager、employee等) - 第2层:
manager对象的属性 - 第3层:
manager.CreateOnIDs数组(超出默认深度)
超出深度限制的对象会被PowerShell直接调用ToString()方法输出,因此数组被转为了空格拼接的字符串。你单独序列化$manager时没有外层嵌套,深度足够,所以输出符合预期。
解决方案
调用ConvertTo-Json时手动指定-Depth参数,设置足够覆盖你对象嵌套层级的深度即可,示例代码如下:
# 序列化时指定深度为3或更高,根据实际嵌套层级调整 $newAccountData | ConvertTo-Json -Depth 3
注意事项
- 如果你的对象嵌套层级更深,可以适当调大Depth的取值,PowerShell 5.1及以上版本支持最大深度为100,无特殊场景设置为10即可覆盖绝大多数需求
- 避免设置过高的不必要深度,防止出现循环引用导致序列化卡死
内容的提问来源于stack exchange,提问作者Patryk Gołębiowski
相关产品推荐
相关产品推荐

