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

