문제

참조 맞춤형 .NET 예외를 직렬화 할 수있는 올바른 방법은 무엇입니까?
그리고 모든 .NET 예외는 직렬화 가능합니까? ...

내 예외를 일련화 할 수있는 이유는 무엇입니까?
누군가가 제 3 자 라이브러리로 정의 된 사용자 정의 예외가 일련화 할 수없는 경우 "버그로 간주 될 수있다"고 말했다. 왜요?

이와 관련하여 예외가 다른 클래스와 다른 이유는 무엇입니까?

도움이 되었습니까?

해결책

예외는 다른 앱 도메인 사이에 마샬링되어야하고 (적절하게) 직렬화 할 수없는 경우 귀중한 디버깅 정보를 잃게됩니다. 다른 클래스와 달리, 예외가 마샬링 될지 여부를 제어 할 수 없습니다.


내가 "당신은 통제 할 수 없다"는 것을 의미 할 때, 나는 당신이 만든 클래스가 일반적으로 유한 한 존재 공간을 가지고 있으며 존재는 잘 알려져 있다는 것을 의미합니다. 그것이 반환 값이고 누군가가 다른 appdomain (또는 다른 기계)에서 호출하려고한다면 그들은 결함을 얻고 "그런 식으로 사용하지 말라"고 말할 수 있습니다. 발신자는 메소드 호출을 마무리하여 직렬화 할 수있는 유형으로 변환해야한다는 것을 알고 있습니다. 그러나 예외는 맨 위에 닿지 않기 때문에 당신이 알지 못했던 appdomain 경계를 초월 할 수 있습니다. 다른 AppDomain의 깊이 깊은 수준의 사용자 정의 응용 프로그램 예외 20 레벨은 Main ()에서보고 된 예외 일 수 있으며 그 과정에서 아무것도 직렬화 가능한 예외로 변환하지 않습니다.

다른 팁

Talljoe의 답변 외에도 웹 서비스를 통해 예외가 전달 될 수 있습니다.이 경우 예외는 직렬화 가능/사형화 가능해야하므로 XML로 전송되고 웹 서비스에 의해 전송 될 수 있어야합니다.

직렬화 할 수없는 클래스를 포함하지 않는 한 모든 클래스의 기본값은 직렬화 할 수 있어야한다고 생각합니다. 일부 디자이너가 그것에 대해 생각하지 않았기 때문에 수업을 전송할 수없는 것은 성가신 일입니다.

"최종"과 동일하게, 모든 변수는 구체적으로 "변수"라고 말하지 않는 한 기본적으로 "최종"이어야합니다.

또한 비공개가 아닌 변수를 갖는 것이 합리적이지 않습니다.

글쎄, 내 언어를 디자인해야합니다.

그러나 대답은 예외가 어떻게 사용될 것인지 모르고 원격 통화를 통해 버릴 수 있다고 가정합니다.

직렬화가 필요한 객체가 ASP.NET 세션입니다. 우리는 세션에 마지막 예외를 저장하고 직렬화 할 수없는 예외는 세부 사항을 직렬화 가능한 것으로 저장하기 위해 추가 번역이 필요합니다 (내부 예외는 도움이되지 않기 때문에 원래 예외를 지정합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top