你好我想序列化一个对象,但是, 如果尝试deseriliaze IEnumerable<>我收到此错误
错误75属性或索引器'节点'无法分配 - 它是只读的
我的示例代码:
序列化部分。
FileStream fs = new FileStream(sv.FileName, FileMode.Create, FileAccess.ReadWrite);
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(fs, graphControl.Nodes);
fs.Close();
反序列化部分:
FileStream fs = new FileStream(op.FileName, FileMode.Open, FileAccess.ReadWrite);
BinaryFormatter bin = new BinaryFormatter();
//Error Here
graphControl.Nodes = (IEnumerable<Node>)bin.Deserialize(fs);
节点类部分:
public List<Node> graphNodes = new List<Node>();
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public IEnumerable<Node> Nodes { get { return graphNodes; } }
任何人都可以帮助我?
答案 0 :(得分:2)
graphNodes不应该是公共的,但既然是,请使用它:
graphControl.graphNodes = (IEnumerable<Node>)bin.Deserialize(fs);
但它确实不应该是公开的,所以这更好:
graphControl.Nodes.Clear();
graphControl.Nodes.AddRange( (IEnumerable<Node>)bin.Deserialize(fs) );
...并将graphNodes
设为私有。
答案 1 :(得分:1)
由于你有一个IEnumerable<Node>
,你可能需要一次只做一件事:
graphControl.Nodes.Clear();
var nodes = (IEnumerable<Node>)bin.Deserialize(fs);
foreach(var node in nodes) {
graphControl.Nodes.Add(node);
}