gpt4 book ai didi

powershell - 使用 xml 导出和导入自定义类型对象时遇到问题

转载 作者:行者123 更新时间:2023-12-05 00:50:49 24 4
gpt4 key购买 nike

使用 XML 导出和导入自定义类型对象时遇到问题。
对象更改类型和丢失方法。

脚本:

# Powershell 5

$file = 'C:\Scripts\Storage\file.xml'

class test {
[string] $name
[string] getValue() {
return 'value'
}
}

$a = [test]::new()
$a.GetType() # object type is "test"
$a |gm # it has method "getValue" | Name : getValue ,
MemberType : Method


$a | Export-Clixml $file
$b = Import-Clixml $file


$b.GetType() # object type is "PSObject"
$b | gm # method "getValue" is no longer there

我如何获得 $b.gettype() -eq $a.gettype()是真实的?

我想将对象导出到 XML 并重新导入它,而不会丢失它的类型和方法。

最佳答案

所以这就是事情变得有点困惑的地方。是的,$b是一个 PSObject,但它也是一个类型为 [test] 的对象以及。要查看此内容,您可以执行以下操作:

$b.psobject.TypeNames

你会看见:
Deserialized.test
Deserialized.System.Object

但是,由于对象被反序列化,您确实丢失了该方法。这是导出为 XML,然后重新导入它所固有的。将对象保存到磁盘时,反序列化是一种必要的邪恶,因为当您稍后导入它们时,它们不再是“事件”对象,它们只是将对象导出到磁盘时的外观快照。

导出的对象保留了它们的所有属性,就像您期望 friend 的快照一样(他们的头发颜色、他们脸上的假笑、他们给毛绒袋鼠的粗俗手势),但它们丢失了互动方法(无论你怎么挠,照片都不会咯咯笑)。

如果您真的想要,您可以做什么 $b要拥有它的方法,就是在导入时强类型化它,例如:
[test]$b = Import-Clixml $file

此时 $b将表现得如何 $a做。

关于powershell - 使用 xml 导出和导入自定义类型对象时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45357922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com