HttpParseException.GetObjectData(SerializationInfo, StreamingContext) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Türetilmiş bir sınıfta geçersiz kılındığında, nesnesini özel durumla ilgili bilgilerle ayarlar SerializationInfo .
public:
override void GetObjectData(System::Runtime::Serialization::SerializationInfo ^ info, System::Runtime::Serialization::StreamingContext context);
public override void GetObjectData (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
override this.GetObjectData : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> unit
Public Overrides Sub GetObjectData (info As SerializationInfo, context As StreamingContext)
Parametreler
- info
- SerializationInfo
Oluşturulan özel durumla ilgili serileştirilmiş nesne verilerini içeren SerializationInfo.
- context
- StreamingContext
Kaynak veya hedefle ilgili bağlamsal bilgileri içeren StreamingContext.
Özel durumlar
info parametresidirnull.
Örnekler
Aşağıdaki kod örneği, iki özellikte küçük değişiklikler yapan ve ardından serileştirmeyi gerçekleştirmek için temel sınıfı çağıran yöntemini uygulayan GetObjectData türetilmiş bir seri hale getirilebilir Exception sınıfın nasıl tanımlandığını gösterir. Örnek, 0'a bölme hatasını zorlar ve sonra türetilmiş Exceptionbir örneğini oluşturur. Kod örneği bir dosyaya serileştirir, dosyayı yeni Exceptionbir içine seri durumdan çıkararak oluşturur ve ardından özel durumun verilerini yakalar ve görüntüler.
#using <System.Runtime.Serialization.Formatters.Soap.dll>
using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Soap;
// Define a serializable derived exception class.
[Serializable]
ref class SecondLevelException: public Exception, public ISerializable
{
public:
// This public constructor is used by class instantiators.
SecondLevelException( String^ message, Exception^ inner )
: Exception( message, inner )
{
HelpLink = "http://MSDN.Microsoft.com";
Source = "Exception_Class_Samples";
}
protected:
// This protected constructor is used for deserialization.
SecondLevelException( SerializationInfo^ info, StreamingContext context )
: Exception( info, context )
{}
public:
// GetObjectData performs a custom serialization.
[System::Security::Permissions::SecurityPermissionAttribute
(System::Security::Permissions::SecurityAction::LinkDemand,
Flags=System::Security::Permissions::SecurityPermissionFlag::SerializationFormatter)]
virtual void GetObjectData( SerializationInfo^ info, StreamingContext context ) override
{
// Change the case of two properties, and then use the
// method of the base class.
HelpLink = HelpLink->ToLower();
Source = Source->ToUpperInvariant();
Exception::GetObjectData( info, context );
}
};
int 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 = gcnew 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 = gcnew FileStream( "NewException.dat",FileMode::Create );
try
{
// Serialize the derived exception.
SoapFormatter^ formatter = gcnew SoapFormatter( nullptr,StreamingContext(StreamingContextStates::File) );
formatter->Serialize( stream, newExcept );
// Rewind the stream and deserialize the
// exception.
stream->Position = 0;
SecondLevelException^ deserExcept = dynamic_cast<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 of the Exception constructor and Exception.GetObjectData
with SerializationInfo and StreamingContext parameters generates
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
SecondLevelException: Forced a division by 0 and threw another exception. ---> S
ystem.DivideByZeroException: Attempted to divide by zero.
at main()
--- End of inner exception stack trace ---
at main()
*/
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
// 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.
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()
*/
' If compiling with the Visual Basic compiler (vbc.exe) from the command
' prompt, be sure to add the following switch:
' /reference:System.Runtime.Serialization.Formatters.Soap.dll
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Imports System.Security.Permissions
' Define a serializable derived exception class.
<Serializable()> _
Class SecondLevelException
Inherits Exception
' This public constructor is used by class instantiators.
Public Sub New( message As String, inner As Exception )
MyBase.New( message, inner )
HelpLink = "http://MSDN.Microsoft.com"
Source = "Exception_Class_Samples"
End Sub
' This protected constructor is used for deserialization.
Protected Sub New( info As SerializationInfo, _
context As StreamingContext )
MyBase.New( info, context )
End Sub
' GetObjectData performs a custom serialization.
<SecurityPermissionAttribute(SecurityAction.Demand, _
SerializationFormatter:=True)> _
Overrides Sub GetObjectData( info As SerializationInfo, _
context As StreamingContext)
' Change the case of two properties, and then use the
' method of the base class.
HelpLink = HelpLink.ToLower()
Source = Source.ToUpperInvariant()
MyBase.GetObjectData(info, context)
End Sub
End Class
Module SerializationDemo
Sub Main()
Console.WriteLine( _
"This example of the Exception constructor " & _
"and Exception.GetObjectData " & vbCrLf & _
"with SerializationInfo and StreamingContext " & _
"parameters generates " & vbCrLf & _
"the following output." & vbCrLf )
' This code forces a division by 0 and catches the
' resulting exception.
Try
Try
Dim zero As Integer = 0
Dim ecks As Integer = 1 \ zero
' Create a new exception to throw again.
Catch ex As Exception
Dim newExcept As New SecondLevelException( _
"Forced a division by 0 and threw " & _
"another exception.", ex )
Console.WriteLine( _
"Forced a division by 0, caught the " & _
"resulting exception, " & vbCrLf & _
"and created a derived exception:" & vbCrLf )
Console.WriteLine( "HelpLink: {0}", _
newExcept.HelpLink )
Console.WriteLine( "Source: {0}", _
newExcept.Source )
' This FileStream is used for the serialization.
Dim stream As New FileStream( _
"NewException.dat", FileMode.Create )
' Serialize the derived exception.
Try
Dim formatter As New SoapFormatter( Nothing, _
New StreamingContext( _
StreamingContextStates.File ) )
formatter.Serialize( stream, newExcept )
' Rewind the stream and deserialize the
' exception.
stream.Position = 0
Dim deserExcept As SecondLevelException = _
CType( formatter.Deserialize( stream ), _
SecondLevelException )
Console.WriteLine( vbCrLf & _
"Serialized the exception, and then " & _
"deserialized the resulting stream " & _
"into a " & vbCrLf & "new exception. " & _
"The deserialization changed the case " & _
"of certain properties:" & vbCrLf )
' Throw the deserialized exception again.
Throw deserExcept
Catch se As SerializationException
Console.WriteLine( "Failed to serialize: {0}", _
se.ToString( ) )
Finally
stream.Close( )
End Try
End Try
Catch ex As Exception
Console.WriteLine( "HelpLink: {0}", ex.HelpLink )
Console.WriteLine( "Source: {0}", ex.Source )
Console.WriteLine( )
Console.WriteLine( ex.ToString( ) )
End Try
End Sub
End Module
' 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_VB.SecondLevelException: Forced a division by 0 and threw another exce
' ption. ---> System.DivideByZeroException: Attempted to divide by zero.
' at NDP_UE_VB.SerializationDemo.Main()
' --- End of inner exception stack trace ---
' at NDP_UE_VB.SerializationDemo.Main()
Açıklamalar
yöntemi, GetObjectData serileştirme için hedeflenen tüm özel durum nesnesi verileriyle bir SerializationInfo nesnesi ayarlar. Seri durumdan çıkarma sırasında, özel durum akış üzerinden iletilen SerializationInfo'dan yeniden oluşturulur.