ObjRef Constructor (SerializationInfo^, StreamingContext)
.NET Framework (current version)
Initializes a new instance of the ObjRef class from serialized data.
Assembly: mscorlib (in mscorlib.dll)
protected:
[SecurityCriticalAttribute]
ObjRef(
SerializationInfo^ info,
StreamingContext context
)
Parameters
- info
-
Type:
System.Runtime.Serialization::SerializationInfo^
The object that holds the serialized object data.
- context
-
Type:
System.Runtime.Serialization::StreamingContext
The contextual information about the source or destination of the exception.
This constructor is called during deserialization to reconstitute the exception object transmitted over a stream. For more information, see ISerializable.
// a custom ObjRef class that outputs its status [System::Security::Permissions::SecurityPermissionAttribute( System::Security::Permissions::SecurityAction::Demand, Flags=System::Security::Permissions::SecurityPermissionFlag::SerializationFormatter)] [System::Security::Permissions::SecurityPermissionAttribute (System::Security::Permissions::SecurityAction::Demand, Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)] [System::Security::Permissions::SecurityPermissionAttribute (System::Security::Permissions::SecurityAction::InheritanceDemand, Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)] public ref class MyObjRef: public ObjRef { private: // only instantiate via marshaling or deserialization MyObjRef(){} public: MyObjRef( MarshalByRefObject^ o, Type^ t ) : ObjRef( o, t ) { Console::WriteLine( "Created MyObjRef." ); ORDump(); } MyObjRef( SerializationInfo^ i, StreamingContext c ) : ObjRef( i, c ) { Console::WriteLine( "Deserialized MyObjRef." ); } virtual void GetObjectData( SerializationInfo^ s, StreamingContext c ) override { // After calling the base method, change the type from ObjRef to MyObjRef ObjRef::GetObjectData( s, c ); s->SetType( GetType() ); Console::WriteLine( "Serialized MyObjRef." ); } virtual Object^ GetRealObject( StreamingContext context ) override { if ( IsFromThisAppDomain() || IsFromThisProcess() ) { Console::WriteLine( "Returning actual Object* referenced by MyObjRef." ); return ObjRef::GetRealObject( context ); } else { Console::WriteLine( "Returning proxy to remote Object*." ); return RemotingServices::Unmarshal( this ); } } void ORDump() { Console::WriteLine( " --- Reporting MyObjRef Info --- " ); Console::WriteLine( "Reference to {0}.", TypeInfo->TypeName ); Console::WriteLine( "URI is {0}.", URI ); Console::WriteLine( "\nWriting EnvoyInfo: " ); if ( EnvoyInfo != nullptr ) { IMessageSink^ EISinks = EnvoyInfo->EnvoySinks; while ( EISinks != nullptr ) { Console::WriteLine( "\tSink: {0}", EISinks ); EISinks = EISinks->NextSink; } } else Console::WriteLine( "\t {no sinks}" ); Console::WriteLine( "\nWriting ChannelInfo: " ); for ( int i = 0; i < ChannelInfo->ChannelData->Length; i++ ) Console::WriteLine( "\tChannel: {0}", ChannelInfo->ChannelData[ i ] ); Console::WriteLine( " ----------------------------- " ); } }; // a class that uses MyObjRef public ref class LocalObject: public MarshalByRefObject { public: // overriding CreateObjRef will allow us to return a custom ObjRef [System::Security::Permissions::SecurityPermissionAttribute (System::Security::Permissions::SecurityAction::LinkDemand, Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)] virtual ObjRef^ CreateObjRef( Type^ t ) override { return gcnew MyObjRef( this,t ); } };
.NET Framework
Available since 1.1
Available since 1.1
Show: