TypeLoadException.GetObjectData メソッド
アセンブリ: mscorlib (mscorlib.dll 内)

Dim instance As TypeLoadException Dim info As SerializationInfo Dim context As StreamingContext instance.GetObjectData(info, context)


GetObjectData は、シリアル化する対象のすべての例外オブジェクト データを使用して、SerializationInfo を設定します。逆シリアル化中に、ストリームで転送された SerializationInfo から例外オブジェクトが再構成されます。

例外を生成し、例外データをファイルにシリアル化してから、その例外を再構築する例を次に示します。このコード例を実行するには、アセンブリの完全限定名を指定する必要があります。アセンブリの完全限定名を取得する方法については、「アセンブリ名」を参照してください。
Imports System Imports System.Reflection Imports System.Runtime.Serialization Imports System.Runtime.Serialization.Formatters.Soap Imports System.Security.Permissions Imports System.IO Class GetObjectDataDemo Public Shared Sub Main() ' Get a reference to the assembly mscorlib.dll, which is always ' loaded. (System.String is defined in mscorlib.) Dim tString As Type = GetType(String) Dim mscorlib As [Assembly] = tString.Assembly Try Console.WriteLine("Attempting to load a type not present in the assembly 'mscorlib'") ' This loading of invalid type raises a TypeLoadException Dim myType As Type = mscorlib.GetType("System.NonExistentType", True) Catch ' Serialize the exception to disk and reconstitute it. Dim ErrorDatetime as System.DateTime = DateTime.Now Console.WriteLine("A TypeLoadException has been raised.") ' Create MyTypeLoadException instance with current time. Dim myException As new MyTypeLoadException(ErrorDatetime) Dim myFormatter as IFormatter = new SoapFormatter() Dim myFileStream as Stream myFileStream = New FileStream("typeload.xml", FileMode.Create, FileAccess.Write, FileShare.None) Console.WriteLine("Serializing the TypeLoadException with DateTime as " _ & ErrorDatetime.ToString()) ' Serialize the MyTypeLoadException instance to a file. myFormatter.Serialize(myFileStream, myException) myFileStream.Close() Console.WriteLine("Deserializing the Exception.") myFileStream = New FileStream("typeload.xml", FileMode.Open, FileAccess.Read, FileShare.None) ' Deserialize and reconstitute the instance from file. myException = CType(myFormatter.Deserialize(myFileStream), MyTypeLoadException) myFileStream.Close() Console.WriteLine("Deserialized exception has ErrorDateTime = " + myException.ErrorDateTime.ToString()) End Try End Sub 'Main End Class ' This class overrides the GetObjectData method and initializes ' its data with current time. <Serializable()> _ Public Class MyTypeLoadException Inherits TypeLoadException Private _errorDateTime As System.DateTime = DateTime.Now Public ReadOnly Property ErrorDateTime As DateTime Get Return _errorDateTime End Get End Property Public Sub New(myDateTime As DateTime) _errorDateTime = myDateTime End Sub 'New Protected Sub New(sInfo As SerializationInfo, sContext As StreamingContext) MyBase.New(sInfo, sContext) ' Reconstitute the deserialized information into the instance. _errorDateTime = sInfo.GetDateTime("ErrorDate") End Sub 'New ' GetObjectData overrides must always have a demand for SerializationFormatter. <SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter:=true)> _ Public Overrides Sub GetObjectData(sInfo As SerializationInfo, sContext As StreamingContext) MyBase.GetObjectData(sInfo, sContext) ' Add a value to the Serialization information. sInfo.AddValue("ErrorDate", ErrorDateTime) End Sub 'GetObjectData End Class 'MyTypeLoadExceptionChild
using System; using System.Reflection; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Soap; using System.Security.Permissions; using System.IO; class GetObjectDataDemo { public static void Main() { // Get a reference to the assembly mscorlib.dll, which is always // loaded. (System.String is defined in mscorlib.) Assembly mscorlib = typeof(string).Assembly; try { Console.WriteLine ("Attempting to load a type not present in the assembly 'mscorlib'"); // This loading of invalid type raises a TypeLoadException Type myType = mscorlib.GetType("System.NonExistentType", true); } catch (TypeLoadException) { // Serialize the exception to disk and reconstitute it. System.DateTime ErrorDatetime = DateTime.Now; Console.WriteLine("A TypeLoadException has been raised."); // Create MyTypeLoadException instance with current time. MyTypeLoadException myException = new MyTypeLoadException(ErrorDatetime); IFormatter myFormatter = new SoapFormatter(); Stream myFileStream = new FileStream("typeload.xml", FileMode.Create, FileAccess.Write, FileShare.None); Console.WriteLine("Serializing the TypeLoadException with DateTime as " + ErrorDatetime); // Serialize the MyTypeLoadException instance to a file. myFormatter.Serialize(myFileStream, myException); myFileStream.Close(); Console.WriteLine("Deserializing the Exception."); myFileStream = new FileStream("typeload.xml", FileMode.Open, FileAccess.Read, FileShare.None); // Deserialize and reconstitute the instance from file. myException = (MyTypeLoadException) myFormatter.Deserialize(myFileStream); myFileStream.Close(); Console.WriteLine("Deserialized exception has ErrorDateTime = " + myException.ErrorDateTime); } } } // This class overrides the GetObjectData method and initializes // its data with current time. [Serializable] public class MyTypeLoadException : TypeLoadException { private System.DateTime _errorDateTime = DateTime.Now; public DateTime ErrorDateTime { get { return _errorDateTime; }} public MyTypeLoadException(DateTime myDateTime) { _errorDateTime = myDateTime; } protected MyTypeLoadException(SerializationInfo sInfo, StreamingContext sContext) : base(sInfo, sContext) { // Reconstitute the deserialized information into the instance. _errorDateTime = sInfo.GetDateTime("ErrorDate"); } // GetObjectData overrides must always have a demand for SerializationFormatter. [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter=true)] public override void GetObjectData(SerializationInfo sInfo, StreamingContext sContext) { base.GetObjectData(sInfo, sContext); // Add a value to the Serialization information. sInfo.AddValue("ErrorDate", ErrorDateTime); } }
#using <System.Runtime.Serialization.Formatters.Soap.dll> using namespace System; using namespace System::Reflection; using namespace System::Runtime::Serialization; using namespace System::Runtime::Serialization::Formatters::Soap; using namespace System::IO; // This class overrides the GetObjectData method and initializes // its data with current time. [Serializable] public ref class MyTypeLoadExceptionChild: public TypeLoadException { public: System::DateTime ErrorDateTime; MyTypeLoadExceptionChild() { ErrorDateTime = DateTime::Now; } MyTypeLoadExceptionChild( DateTime myDateTime ) { ErrorDateTime = myDateTime; } protected: MyTypeLoadExceptionChild( SerializationInfo^ sInfo, StreamingContext * sContext ) { // Reconstitute the deserialized information into the instance. ErrorDateTime = sInfo->GetDateTime( "ErrorDate" ); } public: void GetObjectData( SerializationInfo^ sInfo, StreamingContext * sContext ) { // Add a value to the Serialization information. sInfo->AddValue( "ErrorDate", ErrorDateTime ); } }; int main() { // Load the mscorlib assembly and get a reference to it. // You must supply the fully qualified assembly name for mscorlib.dll here. Assembly^ myAssembly = Assembly::Load( "Assembly text name, Version, Culture, PublicKeyToken" ); try { Console::WriteLine( "Attempting to load a type not present in the assembly 'mscorlib'" ); // This loading of invalid type raises a TypeLoadException Type^ myType = myAssembly->GetType( "System::NonExistentType", true ); } catch ( TypeLoadException^ ) { // Serialize the exception to disk and reconstitute it back again. try { System::DateTime ErrorDatetime = DateTime::Now; Console::WriteLine( "A TypeLoadException has been raised." ); // Create MyTypeLoadException instance with current time. MyTypeLoadExceptionChild^ myTypeLoadExceptionChild = gcnew MyTypeLoadExceptionChild( ErrorDatetime ); IFormatter^ myFormatter = gcnew SoapFormatter; Stream^ myFileStream = gcnew FileStream( "typeload.xml",FileMode::Create,FileAccess::Write,FileShare::None ); Console::WriteLine( "Serializing the TypeLoadException with DateTime as {0}", ErrorDatetime ); // Serialize the MyTypeLoadException instance to a file. myFormatter->Serialize( myFileStream, myTypeLoadExceptionChild ); myFileStream->Close(); Console::WriteLine( "Deserializing the Exception." ); myFileStream = gcnew FileStream( "typeload.xml",FileMode::Open,FileAccess::Read,FileShare::None ); // Deserialize and reconstitute the instance from file. myTypeLoadExceptionChild = safe_cast<MyTypeLoadExceptionChild^>(myFormatter->Deserialize( myFileStream )); myFileStream->Close(); Console::WriteLine( "Deserialized exception has ErrorDateTime = {0}", myTypeLoadExceptionChild->ErrorDateTime ); } catch ( Exception^ e ) { Console::WriteLine( "Exception : {0}", e->Message ); } } catch ( Exception^ e ) { Console::WriteLine( "Exception : {0}", e->Message ); } }

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- TypeLoadException.GetObjectData メソッドのページへのリンク