internal static RemoteDataObject <T> CreateFrom( Stream serializedDataStream, Fragmentor defragmentor) { if (serializedDataStream.Length - serializedDataStream.Position < 40L) { throw new PSRemotingTransportException(PSRemotingErrorId.NotEnoughHeaderForRemoteDataObject, new object[1] { (object)61 }); } RemotingDestination destination = (RemotingDestination)RemoteDataObject <T> .DeserializeUInt(serializedDataStream); RemotingDataType dataType = (RemotingDataType)RemoteDataObject <T> .DeserializeUInt(serializedDataStream); Guid runspacePoolId = RemoteDataObject <T> .DeserializeGuid(serializedDataStream); Guid powerShellId = RemoteDataObject <T> .DeserializeGuid(serializedDataStream); object valueToConvert = (object)null; if (serializedDataStream.Length - 40L > 0L) { valueToConvert = (object)defragmentor.DeserializeToPSObject(serializedDataStream); } T data = (T)LanguagePrimitives.ConvertTo(valueToConvert, typeof(T), (IFormatProvider)CultureInfo.CurrentCulture); return(new RemoteDataObject <T>(destination, dataType, runspacePoolId, powerShellId, data)); }
/// <summary> /// Creates a RemoteDataObject by deserializing <paramref name="data"/>. /// </summary> /// <param name="serializedDataStream"></param> /// <param name="defragmentor"> /// Defragmentor used to deserialize an object. /// </param> /// <returns></returns> internal static RemoteDataObject <T> CreateFrom(Stream serializedDataStream, Fragmentor defragmentor) { Dbg.Assert(serializedDataStream != null, "cannot construct a RemoteDataObject from null data"); Dbg.Assert(defragmentor != null, "defragmentor cannot be null."); if ((serializedDataStream.Length - serializedDataStream.Position) < headerLength) { PSRemotingTransportException e = new PSRemotingTransportException(PSRemotingErrorId.NotEnoughHeaderForRemoteDataObject, RemotingErrorIdStrings.NotEnoughHeaderForRemoteDataObject, headerLength + FragmentedRemoteObject.HeaderLength); throw e; } RemotingDestination destination = (RemotingDestination)DeserializeUInt(serializedDataStream); RemotingDataType dataType = (RemotingDataType)DeserializeUInt(serializedDataStream); Guid runspacePoolId = DeserializeGuid(serializedDataStream); Guid powerShellId = DeserializeGuid(serializedDataStream); object actualData = null; if ((serializedDataStream.Length - headerLength) > 0) { actualData = defragmentor.DeserializeToPSObject(serializedDataStream); } T deserializedObject = (T)LanguagePrimitives.ConvertTo(actualData, typeof(T), System.Globalization.CultureInfo.CurrentCulture); return(new RemoteDataObject <T>(destination, dataType, runspacePoolId, powerShellId, deserializedObject)); }
internal static RemoteDataObject <T> CreateFrom(Stream serializedDataStream, Fragmentor defragmentor) { if ((serializedDataStream.Length - serializedDataStream.Position) < 40L) { PSRemotingTransportException exception = new PSRemotingTransportException(PSRemotingErrorId.NotEnoughHeaderForRemoteDataObject, RemotingErrorIdStrings.NotEnoughHeaderForRemoteDataObject, new object[] { 0x3d }); throw exception; } RemotingDestination destination = (RemotingDestination)RemoteDataObject <T> .DeserializeUInt(serializedDataStream); RemotingDataType dataType = (RemotingDataType)RemoteDataObject <T> .DeserializeUInt(serializedDataStream); Guid runspacePoolId = RemoteDataObject <T> .DeserializeGuid(serializedDataStream); Guid powerShellId = RemoteDataObject <T> .DeserializeGuid(serializedDataStream); object valueToConvert = null; if ((serializedDataStream.Length - 40L) > 0L) { valueToConvert = defragmentor.DeserializeToPSObject(serializedDataStream); } return(new RemoteDataObject <T>(destination, dataType, runspacePoolId, powerShellId, (T)LanguagePrimitives.ConvertTo(valueToConvert, typeof(T), CultureInfo.CurrentCulture))); }