走简约HashTable:为什么Get-Date似乎返回DateTime对象,但BinarySerializer指示它返回一个PSObject?
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = Get-Date '2002-03-23';
}
的关键起始日期似乎包含一个DateTime。
C:\Users\zippy\Documents> $data.StartDate.GetType().FullName
System.DateTime
但是,如果我试图对它进行二进制序列化,我得到一个异常抱怨PSObject是不可序列。
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $data)
$ms.Close()
抛出:
DocumentsException calling "Serialize" with "2" argument(s): "Type 'System.Management.Automation.PSObject' in Assembly 'System.Management.Automation, Versio
n=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable."
At C:\Users\jdearing\AppData\Local\Temp\b8967f99-0a24-41f7-9c97-dad2bc288bd9.ps1:12 char:14
+ $bf.Serialize <<<< ($ms, $data)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
此消息消失,一切工作,如果我使用一个显式的[DATETIME]像这样:
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = [DateTime] (Get-Date '2002-03-23');
}
所以是获取最新不是真的返回一个DateTime,或者是在这里工作的一些其他powershell怪异。
我认为PS中的所有内容默认为“PSObject”,除非您明确定义类型。它执行动态数据类型转换,所以它可能只是返回一个字符串,它在运行时解释为“System.Datetime”。 – JNK 2012-03-09 15:39:22
@JNK但为什么Object.GetType()将某些东西解释为二进制格式化程序解释为PSObject的DateTime? – 2012-03-09 15:41:59
这只是猜测,但可能是因为它在运行时被解释(因为您正在运行PSObject的GetType()方法) - 二进制格式化程序是系统类,而不是PS类 – JNK 2012-03-09 15:44:09