我必须从存储为 JSON 数组的文件中读取一些数据。基本上,数据代表一棵二叉树,带有节点标签和叶子上的值,并且风格化了一条线,如下所示:
[label1,[label2,[label3,w],x],[label4,y,z]]
在所有分支上具有任意深度。现在最终我希望将其转换为树结构,但第一步是读入它。
以下 C# 代码有效(使用 System.Web.Extensions.dll):
var jss = new JavaScriptSerializer();
foreach (string line in System.IO.File.ReadAllLines(filename))
{
var data = jss.Deserialize<object[]>(line);
}
对于“作品”,我的意思是在上面给出的示例中,data.[1] 又是一个对象数组。F# 的直接端口是
let data =
let jss = new JavaScriptSerializer()
System.IO.File.ReadAllLines(filename)
|> Seq.map (fun line -> jss.Deserialize<obj[]>(line))
但是,将此应用于示例确实会产生数据。 [1] 是一个对象而不是对象数组。
我考虑将反序列化替换为
|> Seq.map (fun line -> jss.Deserialize<seq<obj[]>(line))
但这不起作用,因为(在我的示例中)label1 是一个字符串,并且(显然)不能转换为 System.Object []。我还尝试将 C# 代码包装在静态类中,然后使用该类读取 F# 中的数据,但这也不起作用。我知道我可以使用外部 JSON 解析器,但由于使用 JavaScriptSerializer 确实在 C# 中工作,我的固执开始了,我也想在 F# 中这样做。有什么建议么?