以下代码创建一个简单二叉树数组,并尝试对其进行序列化和反序列化。但是,我不知道如何将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()
答案 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)