2016-10-27 3 views
0

안녕하세요 나는 IEnumerable을 <을 deseriliaze하려고하면,하지만 를 객체 직렬화 할> 내가지정 읽기 전용 속성에

오류 75 건물 또는 인덱서 '노드'에 할당 할 수 없습니다이 오류를 얻을 - 그것은 읽기 only

예제 코드 :

일련 번호 부분.

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

graphNodes는 공개하지만이기 때문에, 그것을 사용하지 않아야합니다 :

graphControl.graphNodes = (IEnumerable<Node>)bin.Deserialize(fs); 

를하지만 정말 공개 안된다, 그래서 이것은 더 :

graphControl.Nodes.Clear(); 
graphControl.Nodes.AddRange((IEnumerable<Node>)bin.Deserialize(fs)); 

... graphNodes 비공개로 설정하세요.

1

한 번에 그것을 하나 개의 항목을 할 수있는 IEnumerable<Node> 당신에게 가능성 필요가 있기 때문에 :

graphControl.Nodes.Clear(); 

var nodes = (IEnumerable<Node>)bin.Deserialize(fs); 

foreach(var node in nodes) { 
    graphControl.Nodes.Add(node); 
} 
관련 문제