private void FixupSpecialObject(ObjectHolder holder) { ISurrogateSelector selector = null; if (holder.HasSurrogate) { ISerializationSurrogate surrogate = holder.Surrogate; object obj = surrogate.SetObjectData(holder.ObjectValue, holder.SerializationInfo, this.m_context, selector); if (obj != null) { if (!holder.CanSurrogatedObjectValueChange && obj != holder.ObjectValue) { throw new SerializationException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_NotCyclicallyReferenceableSurrogate"), surrogate.GetType().FullName)); } holder.SetObjectValue(obj, this); } holder.m_surrogate = null; holder.SetFlags(); } else { this.CompleteISerializableObject(holder.ObjectValue, holder.SerializationInfo, this.m_context); } holder.SerializationInfo = null; holder.RequiresSerInfoFixup = false; if (holder.RequiresValueTypeFixup && holder.ValueTypeFixupPerformed) { this.DoValueTypeFixup(null, holder, holder.ObjectValue); } this.DoNewlyRegisteredObjectFixups(holder); }
[System.Security.SecurityCritical] // auto-generated private void FixupSpecialObject(ObjectHolder holder) { ISurrogateSelector uselessSelector=null; Contract.Assert(holder.RequiresSerInfoFixup,"[ObjectManager.FixupSpecialObject]holder.HasSurrogate||holder.HasISerializable"); if (holder.HasSurrogate) { ISerializationSurrogate surrogate = holder.Surrogate; Contract.Assert(surrogate!=null,"surrogate!=null"); object returnValue = surrogate.SetObjectData(holder.ObjectValue, holder.SerializationInfo, m_context, uselessSelector); if (returnValue != null) { if (!holder.CanSurrogatedObjectValueChange && returnValue != holder.ObjectValue) throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_NotCyclicallyReferenceableSurrogate"), surrogate.GetType().FullName)); holder.SetObjectValue(returnValue, this); } holder.m_surrogate = null; holder.SetFlags(); } else { //Set the object data Contract.Assert(holder.ObjectValue is ISerializable,"holder.m_object is ISerializable"); BCLDebug.Trace("SER","[ObjectManager.FixupSpecialObject]Fixing up ISerializable object ",holder.ObjectValue," with id ",holder.m_id); CompleteISerializableObject(holder.ObjectValue, holder.SerializationInfo, m_context); } //Clear anything that we know that we're not going to need. holder.SerializationInfo=null; holder.RequiresSerInfoFixup = false; // For value types, fixups would have been done. So the newly fixed object must be copied // to its container. if (holder.RequiresValueTypeFixup && holder.ValueTypeFixupPerformed){ DoValueTypeFixup(null, holder, holder.ObjectValue); } DoNewlyRegisteredObjectFixups(holder); }
private void FixupSpecialObject(ObjectHolder holder) { ISurrogateSelector selector = null; if (holder.HasSurrogate) { ISerializationSurrogate surrogate = holder.Surrogate; object obj2 = surrogate.SetObjectData(holder.ObjectValue, holder.SerializationInfo, this.m_context, selector); if (obj2 != null) { if (!holder.CanSurrogatedObjectValueChange && (obj2 != holder.ObjectValue)) { throw new SerializationException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_NotCyclicallyReferenceableSurrogate"), new object[] { surrogate.GetType().FullName })); } holder.SetObjectValue(obj2, this); } holder.m_surrogate = null; holder.SetFlags(); } else { this.CompleteISerializableObject(holder.ObjectValue, holder.SerializationInfo, this.m_context); } holder.SerializationInfo = null; holder.RequiresSerInfoFixup = false; if (holder.RequiresValueTypeFixup && holder.ValueTypeFixupPerformed) { this.DoValueTypeFixup(null, holder, holder.ObjectValue); } this.DoNewlyRegisteredObjectFixups(holder); }
private void FixupSpecialObject(ObjectHolder holder) { ISurrogateSelector uselessSelector=null; BCLDebug.Assert(holder.RequiresSerInfoFixup,"[ObjectManager.FixupSpecialObject]holder.HasSurrogate||holder.HasISerializable"); if (holder.HasSurrogate) { ISerializationSurrogate surrogate = holder.Surrogate; BCLDebug.Assert(surrogate!=null,"surrogate!=null"); object returnValue = surrogate.SetObjectData(holder.ObjectValue, holder.SerializationInfo, m_context, uselessSelector); if (returnValue != null) holder.SetObjectValue(returnValue, this); holder.m_surrogate = null; holder.SetFlags(); } else { //Set the object data BCLDebug.Assert(holder.ObjectValue is ISerializable,"holder.m_object is ISerializable"); BCLDebug.Trace("SER","[ObjectManager.FixupSpecialObject]Fixing up ISerializable object ",holder.ObjectValue," with id ",holder.m_id); CompleteISerializableObject(holder.ObjectValue, holder.SerializationInfo, m_context); } //Clear anything that we know that we're not going to need. holder.SerializationInfo=null; holder.RequiresSerInfoFixup = false; // For value types, fixups would have been done. So the newly fixed object must be copied // to its container. if (holder.RequiresValueTypeFixup && holder.ValueTypeFixupPerformed){ DoValueTypeFixup(null, holder, holder.ObjectValue); } DoNewlyRegisteredObjectFixups(holder); }