2011-12-24 3 views
3

나는 내가 뭘하려고하는 모양의 목록을 직렬화하는 것입니다 Shape 클래스의 느릅 나무가C#에서 펜을 직렬화하는 방법?

public Pen outlinePen; 

이 포함되어 있습니다,하지만 모두가 'Type

총회에서

'System.Drawing.Pen '입니다 System.Drawing, Version = 4.0.0.0, 문화 = 중립, PublicKeyToken = b03f5f7f11d50a3a '는 으로 표시되어 있지 않습니다.

이 필드를 [field: NonSerialized()]으로 표시하면 outlinePen이 null이므로로드 된 개체를 사용할 수 없습니다.

System.Drawing.Pen을 serialize하는 다른 방법이 있습니까?

+0

직렬화하려는 경우 왜 'NonSerializable'으로 표시할까요? – Oded

답변

3

관심있는 데이터 만 직렬화해야합니다. Pen은 그래픽 개체이므로 가능한 경우에도 저장하는 것은 좋지 않습니다.

귀하의 경우 예를 들어, 당신은 저장할 수 Pen의 종류는 특별히 Pen 데이터를 저장하기 위해 만든 객체 lighweght하는 PenDataObject 같은 PenColor, PenWidthPenStyle.

희망이 도움이됩니다.

+0

고맙습니다. 나는 그것에 대해 생각하고 있었지만 그것을 피하려고 노력했습니다. 왜냐하면 펜을 사용하여 클래스를 그렸기 때문입니다. 이제 당신이 쓴대로했습니다. – mindmaster

1

Pen은 내부적으로 .NET에서 비 직렬화 가능으로 표시되어 있으며 봉인되어 있으므로 하위 클래스로 만들거나 직렬화 할 수 없습니다. 그래픽을 직렬화해야하는 경우 그래픽 및 그리기 개체를 저장하도록 특별히 설계된 Metafile class을 살펴볼 수 있습니다.

0

부모 개체가 deserialize 될 때 일부 논리 실행과 관련된 다른 접근 방식을 권장합니다.

[NonSerialized] 
private Pen _penToUse; 

[OnDeserialized()] 
internal void Reinitialize(StreamingContext context) 
{ 
    SwitchPen(); //now we can restore the Pen, the easy way would be 
       //to store it in a static class in the domain 
} 
관련 문제