我的任务是反序列化PSON(PowerShell对象表示法)文件,并且正在努力使其正常工作。
显然,PSON文件是Puppet使用的JSON的一种变体,它对字符串的编码方式不同-根据this source
我已经尝试过仅使用标准的JSON.Net DeserializeObject方法:
using (var r = new StreamReader(psonFilePath))
{
string json = r.ReadToEnd();
dynamic jsonObject = JsonConvert.DeserializeObject(json);
}
上面的代码引发异常:
这很有意义,因为标准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'
}
}
}
上面提到的链接指出
我尝试将不同的编码与JSON结合使用,但是无论尝试哪种方式,都会遇到类似的错误。我还尝试删除了“@”,但是由于字符串没有用引号引起来而使解析器异常再次出现,因此遇到了问题。
最佳答案
我认为PSON在这里有两种不同的含义。
与PowerShell相关的
有关更多信息,请参见以下问题:Save hash table in PowerShell object notation (PSON)
您所质疑的文件是有效的PowerShell PSON文件。