ObjRef::GetObjectData Method
Populates a specified SerializationInfo with the data needed to serialize the current ObjRef instance.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- info
- Type: System.Runtime.Serialization::SerializationInfo
The SerializationInfo to populate with data.
- context
- Type: System.Runtime.Serialization::StreamingContext
The contextual information about the source or destination of the serialization.
Implements
ISerializable::GetObjectData(SerializationInfo, StreamingContext)| Exception | Condition |
|---|---|
| ArgumentNullException | The info parameter is nullptr. |
| SecurityException | The immediate caller does not have serialization formatter permission. |
The current method fills the provided SerializationInfo with all the data needed to recreate the ObjRef.
The current method is an implementation of GetObjectData.
// 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 ); } };
- SecurityPermission
for providing serialization services. Demand value: SecurityAction::LinkDemand; Permission value: SecurityPermissionFlag::SerializationFormatter
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.