Мне нужно прочитать в некоторых данных из файла, который хранится как массивы JSON. В основном данные представляют собой двоичное дерево с метками для узлов и значениями на листах, а стилизованная строка выглядит так:F # десериализующий массив массивов
[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);
}
С «работами» я имею в виду, что на приведенном выше примере данные. [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#, мой stubborness пинает, и я тоже хотел бы сделать это в F #. Какие-либо предложения?
Возможно, вы можете использовать [JSON Type Provider] (http://fsharp.github.com/FSharp.Data/library/JsonProvider.html) для реализации этого? –