2009-07-23 2 views
14

다음 클래스를 BinaryFormatter으로 직렬화하면 Roar 이벤트를 구독하는 개체도 serialize됩니다. 해당 개체에 대한 참조가 EventHandler 대리자에 의해 유지되므로 해당 개체를 serialize합니다.오브젝트를 직렬화 할 때 이벤트 등록자를 무시하려면 어떻게합니까?

[Serializable] 
public class Lion 
{ 
    public event EventHandler Roar; 

    public string Name { get; set; } 
    public float Fluffiness { get; set; } 

    public Lion(string name, float fluffiness) 
    { 
     Name = name; 
     Fluffiness = fluffiness; 
    } 

    public void Poke() 
    { 
     Roar(); // Could be null, etc.. 
    } 
} 

어떻게 이벤트 가입자가 사자로 시작하는 객체 그래프의 한 부분으로 직렬화 중지 것?

[NonSerializable] 속성을 event에 넣는 것은 컴파일되지 않습니다.


참고 : 사이트에 정보가있는 것이 유용 할 것 같아서 제 질문에 대답하고 있습니다.

자주 묻는 질문 : 자신의 질문에 대해 질문하고 대답하는 것은 완벽하지만 괜찮은 질문인데, 질문의 형태로 표현하십시오.

답변

25

당신은 event[NonSerialized] 속성의 일환으로 "field:"를 포함해야합니다.

즉 :

[field: NonSerialized] 
public event EventHandler Roar; 
+0

감사합니다. 그런데 왜 그런가요? –

+0

System.NonSerializedAttribute에 제약 조건이 있기 때문에 그것은 필드에 적용 할 수 있습니다! – Grubl3r