我的任务是将pson(powerShell对象符号)文件进行删除,并且正在努力使其正常工作。显然,PSON文件是Puppet使用的JSON的变体,该变体以不同的方式编码字符串 - 根据此源
我尝试仅使用标准JSON.NET DESERIALIZEOBJECT方法:
using (var r = new StreamReader(psonFilePath))
{
string json = r.ReadToEnd();
dynamic jsonObject = JsonConvert.DeserializeObject(json);
}
以上代码引发了例外:
"解析值时遇到意外角色: @。路径'', 第0行,位置0。"
作为标准JSON文件,一开始就不会有"@"。
PSON文件的示例如下:
@{
shapes = @{
'SQ4297' = @{
shapeid = 'SQ4297'
shapetype = 'square'
sides = 'four'
colour = 'purple'
}
'SQ6281' = @{
shapeid = 'SQ6281'
shapetype = 'square'
sides = 'four'
colour = 'orange'
}
'TR14' = @{
shapeid = 'TR14'
shapetype = 'triange'
sides = 'three'
colour = 'green'
}
}
}
上面提到的链接指出
大多数解析器将产生PSON的可用输出,如果它们是 指示将输入解释为Latin-1编码
我尝试使用JSON使用不同的编码,但无论我尝试哪种方式都会获得类似的错误。我还尝试删除"@",但随后遇到问题,因为字符串未包含在引号中,以便再次解析。
我认为这里有两种不同的含义。
-
与PowerShell有关的PSON,指的是PowerShell对象表示法。这是用于将PowerShell数据对象存储在文件中的格式。PSON文件的一个有用功能是,在PowerShell中执行时,它可以自身进行序列化。
有关更多信息,请参阅此问题:在PowerShell对象符号(PSON)中保存哈希表
您的问题中的文件是有效的PowerShell PSON文件。
-
另一个PSON似乎是协议JSON。" json的超高效二进制序列化格式" this,我一无所知。