JSON 배열로 저장된 파일에서 일부 데이터를 읽어야합니다. 기본적으로 데이터는 노드의 레이블이있는 이진 트리와 리프의 값을 나타내고 양식화 된 선은 다음과 같습니다.F # 배열 배열 역 직렬화
[label1, [label3, w], x], [label4, y] ]
모든 지점에서 임의의 깊이 수준을 유지합니다. 이제 궁극적으로 내가 트리 구조로이 변환 찾고 있어요,하지만 첫 번째 단계는 그것을 읽고
다음 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] 객체 배열이 아니라 객체입니다. LABEL1이 문자열이고 (분명히)은 []으로 System.Object로 변환 할 수 없습니다
나는 |> Seq.map (fun line -> jss.Deserialize<seq<obj[]>(line))
하여 직렬화를 교체 고려하지만 (내 예제에서)와 같은 작동하지 않습니다. 정적 클래스에서 C# 코드를 래핑하려고 시도한 다음이 클래스를 사용하여 F #의 데이터를 읽었지만 작동하지 않습니다. 외부 JSON 파서를 사용할 수는 있지만 JavaScriptSerializer를 사용하면 C#에서 작동하므로 내 stubborness가 시작되고 F #에서도이 작업을 수행하고 싶습니다. 어떤 제안?
어쩌면 당신은 이것을 구현하기 위해 [JSON Type Provider] (http://fsharp.github.com/FSharp.Data/library/JsonProvider.html)를 사용할 수 있습니까? –