序列化二叉树数组

时间:2014-04-02 19:51:37

标签: f# binary-tree

以下代码创建一个简单二叉树数组,并尝试对其进行序列化和反序列化。但是,我不知道如何将formatter.Deserialize(fso)创建的对象转换回树数组。我只是得到错误"这个表达式应该有类型Tree数组,但这里有类型obj。"

type Tree = | Branch of (string*float)*(Tree*Tree)
            | Leaf of float

let trees = [|Branch (("x1", 0.), (Leaf 0., Leaf 1.)); Branch (("x2", 0.), (Leaf 0., Leaf 1.))|]

//Serialize
let filename = "C:/tree.dat"
let fs = new FileStream(filename, FileMode.Create)
let formatter = new BinaryFormatter()
formatter.Serialize(fs, trees)
fs.Close()

//Deserialize
let fso = new FileStream(filename, FileMode.Open)
let (trees2:array<Tree>) = formatter.Deserialize(fso)
fso.Close()

2 个答案:

答案 0 :(得分:1)

let trees2 = formatter.Deserialize(fso) :?> Tree[]

答案 1 :(得分:1)

formatter.Deserialize的结果是obj,它与array<Tree>类型不匹配,因此您需要向下投射:

...
let trees2 = formatter.Deserialize(fso) :?> array<Tree>

let (trees2:array<Tree>) = downcast formatter.Deserialize(fso)
相关问题