首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用xml导出和导入自定义类型对象时出现问题

使用xml导出和导入自定义类型对象时出现问题
EN

Stack Overflow用户
提问于 2017-07-28 01:57:17
回答 1查看 393关注 0票数 4

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

脚本:

代码语言:javascript
复制
# 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,然后重新导入它,而不丢失其类型和方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 02:47:09

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

代码语言:javascript
复制
$b.psobject.TypeNames

您将看到:

代码语言:javascript
复制
Deserialized.test
Deserialized.System.Object

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

导出的对象保持了它们的所有属性,就像你期望的朋友的快照一样(他们头发的颜色,他们脸上的傻笑,他们给填充袋鼠的粗俗的手势),但他们失去了交互方法(无论你怎么挠它,照片都不会咯咯笑)。

如果您真的希望$b具有其方法,那么您可以在导入它时对其进行强类型,例如:

代码语言:javascript
复制
[test]$b = Import-Clixml $file

在这一点上,$b的行为将与$a完全相同。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45357922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档