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

PowerShell中使用ConvertTo-Xml序列化对象后如何还原为原对象?

在PowerShell中用ConvertTo-Xml序列化并还原对象的方法

由于ConvertTo-Xml仅生成描述对象结构的XML,没有内置的反解析命令,需要手动遍历XML节点重建原对象。以下是针对你的场景的具体实现步骤:

步骤1:解析XML并提取对象节点

从已解析的XML中获取对应的数据节点:

# 假设已完成之前的XML解析,$parsed_xml_string是解析后的XML对象
$objectNode = $parsed_xml_string.Objects.Object

步骤2:重建自定义对象

根据XML中记录的类型和属性,手动构建原对象:

# 创建空的自定义对象模板
$restoredObj = [pscustomobject]@{}

# 遍历所有Property节点,添加属性和对应值
foreach ($prop in $objectNode.Property) {
    # 读取属性名和值,根据Type属性转换数据类型
    $propName = $prop.Name
    $propValue = $prop.'#text'
    $propType = [type]$prop.Type

    # 将值转换为对应类型后添加到对象
    $restoredObj | Add-Member -MemberType NoteProperty -Name $propName -Value ($propValue -as $propType)
}

# 查看还原后的对象
$restoredObj

执行后会得到和$custom_obj完全一致的结果:

hello
-----
world

通用化处理(支持更多对象类型)

如果需要处理更复杂的对象(比如嵌套对象、数组等),可以扩展逻辑为可复用函数:

function ConvertFrom-CustomXml {
    param(
        [Parameter(Mandatory=$true)]
        [xml]$XmlInput
    )

    process {
        foreach ($objNode in $XmlInput.Objects.Object) {
            $objType = [type]$objNode.Type
            $restoredObj = $null

            if ($objType -eq [pscustomobject]) {
                $restoredObj = [pscustomobject]@{}
                foreach ($prop in $objNode.Property) {
                    $propName = $prop.Name
                    $propValue = $prop.'#text'
                    $propType = [type]$prop.Type
                    $restoredObj | Add-Member -MemberType NoteProperty -Name $propName -Value ($propValue -as $propType)
                }
            }
            # 可扩展支持其他类型,如数组、自定义类等
            $restoredObj
        }
    }
}

# 使用示例
$restoredObj = ConvertFrom-CustomXml -XmlInput $parsed_xml_string
$restoredObj

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:10:26