이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

Exception.GetObjectData 메서드 (SerializationInfo, StreamingContext)

 

게시 날짜: 2016년 11월

파생 클래스에서 재정의된 경우 예외에 관한 정보를 SerializationInfo에 설정합니다.

네임스페이스:   System
어셈블리:  mscorlib(mscorlib.dll에 있음)

[SecurityCriticalAttribute]
public virtual void GetObjectData(
	SerializationInfo info,
	StreamingContext context
)

매개 변수

info
Type: System.Runtime.Serialization.SerializationInfo

throw되는 예외에 대해 serialize된 개체 데이터를 보유하는 SerializationInfo입니다.

context
Type: System.Runtime.Serialization.StreamingContext

소스 또는 대상에 대한 컨텍스트 정보를 포함하는 StreamingContext입니다.

Exception Condition
ArgumentNullException

info 매개 변수가 null 참조(Visual Basic의 경우 Nothing)입니다.

GetObjectData는 serialization을 위해 대상으로 하는 모든 예외 개체 데이터를 사용하여 SerializationInfo를 설정합니다. deserialization을 수행하는 동안 스트림을 통해 전송된 SerializationInfo에서 예외가 다시 구성됩니다.

다음 코드 예제에서는 파생 정의 직렬화 가능 Exception 구현 하는 클래스 GetObjectData, 두 개의 속성에 사소한 변경 사항 수 있게 해줍니다 다음 기본 클래스를 호출 하는 직렬화를 수행 하려면. 이 예제에서는 0으로 나누기 오류를 강제로 다음 파생된 예외 인스턴스를 만듭니다. 코드 파일에 인스턴스를 serialize, 파일, throw 하는 새 예외도 deserialize 한 다음를 catch 하는 예외 데이터를 표시 합니다.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.Security.Permissions;

 // Define a serializable derived exception class.
 [Serializable()]
 class SecondLevelException : Exception, ISerializable
 {
     // This public constructor is used by class instantiators.
     public SecondLevelException( string message, Exception inner ) :
         base( message, inner )
     {
         HelpLink = "http://MSDN.Microsoft.com";
         Source = "Exception_Class_Samples";
     }

     // This protected constructor is used for deserialization.
     protected SecondLevelException( SerializationInfo info, 
         StreamingContext context ) :
             base( info, context )
     { }

     // GetObjectData performs a custom serialization.
     [SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)]
     public override void GetObjectData( SerializationInfo info, 
         StreamingContext context ) 
     {
         // Change the case of two properties, and then use the 
         // method of the base class.
         HelpLink = HelpLink.ToLower( );
         Source = Source.ToUpperInvariant();

         base.GetObjectData( info, context );
     }
 }

 class SerializationDemo 
 {
     public static void Main() 
     {
         Console.WriteLine( 
             "This example of the Exception constructor " +
             "and Exception.GetObjectData\nwith Serialization" +
             "Info and StreamingContext parameters " +
             "generates \nthe following output.\n" );

         try
         {
             // This code forces a division by 0 and catches the 
             // resulting exception.
             try
             {
                 int  zero = 0;
                 int  ecks = 1 / zero;
             }
             catch( Exception ex )
             {
                 // Create a new exception to throw again.
                 SecondLevelException newExcept =
                     new SecondLevelException( 
                         "Forced a division by 0 and threw " +
                         "another exception.", ex );

                 Console.WriteLine( 
                     "Forced a division by 0, caught the " +
                     "resulting exception, \n" +
                     "and created a derived exception:\n" );
                 Console.WriteLine( "HelpLink: {0}", 
                     newExcept.HelpLink );
                 Console.WriteLine( "Source:   {0}", 
                     newExcept.Source );

                 // This FileStream is used for the serialization.
                 FileStream stream = 
                     new FileStream( "NewException.dat", 
                         FileMode.Create );

                 try
                 {
                     // Serialize the derived exception.
                     SoapFormatter formatter = 
                         new SoapFormatter( null,
                             new StreamingContext( 
                                 StreamingContextStates.File ) );
                     formatter.Serialize( stream, newExcept );

                     // Rewind the stream and deserialize the 
                     // exception.
                     stream.Position = 0;
                     SecondLevelException deserExcept = 
                         (SecondLevelException)
                             formatter.Deserialize( stream );

                     Console.WriteLine( 
                         "\nSerialized the exception, and then " +
                         "deserialized the resulting stream " +
                         "into a \nnew exception. " +
                         "The deserialization changed the case " +
                         "of certain properties:\n" );

                     // Throw the deserialized exception again.
                     throw deserExcept;
                 }
                 catch( SerializationException se )
                 {
                     Console.WriteLine( "Failed to serialize: {0}", 
                         se.ToString( ) );
                 }
                 finally
                 {
                     stream.Close( );
                 }
             }
         }
         catch( Exception ex )
         {
             Console.WriteLine( "HelpLink: {0}", ex.HelpLink );
             Console.WriteLine( "Source:   {0}", ex.Source );

             Console.WriteLine( );
             Console.WriteLine( ex.ToString( ) );
         }
     }
 }
/*
This example displays the following output.

Forced a division by 0, caught the resulting exception,
and created a derived exception:

HelpLink: http://MSDN.Microsoft.com
Source:   Exception_Class_Samples

Serialized the exception, and then deserialized the resulting stream into a
new exception. The deserialization changed the case of certain properties:

HelpLink: http://msdn.microsoft.com
Source:   EXCEPTION_CLASS_SAMPLES

NDP_UE_CS.SecondLevelException: Forced a division by 0 and threw another except
ion. ---> System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.SerializationDemo.Main()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.SerializationDemo.Main()
*/

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

.NET Framework
1.1 이후 사용 가능
맨 위로 이동
표시: