分配给只读属性

时间:2016-10-27 15:27:22

标签: c# serialization

你好我想序列化一个对象,但是, 如果尝试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; } }

任何人都可以帮助我?

2 个答案:

答案 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);
}