反序列化PSON文件

时间:2015-05-11 14:24:55

标签: c# json powershell json.net

我的任务是反序列化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);
}

以上代码抛出异常:

  

“解析值时遇到意外的字符:@。Path'',   第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编码,但无论我尝试哪种方式都会遇到类似的错误。我也尝试删除'@'但后来遇到问题,因为字符串没有用引号括起来,所以解析器再次出现异常。

1 个答案:

答案 0 :(得分:2)

我认为PSON有两种不同的含义。

  1. PSON与PowerShell相关,是指PowerShell Object Notation。这是一种用于在文件中存储PowerShell数据对象的格式。 PSON文件的一个有用功能是它可以在PowerShell中执行时反序列化。

    有关详细信息,请参阅此问题:Save hash table in PowerShell object notation (PSON)

    您提问的文件是有效的PowerShell PSON文件。

  2. 其他PSON似乎是Protocol JSON " JSON的超高效二进制序列化格式" 这个,我一无所知。