/// <summary> /// As per the public ChangeType, but allows for workspace-sharing to reduce buffer overhead. /// </summary> internal static TNewType ChangeType <TOldType, TNewType>(TOldType instance, SerializationContext context) { if (instance == null) { return(default(TNewType)); // GIGO } using (MemoryStream ms = new MemoryStream()) { SerializationContext tmpCtx = new SerializationContext(ms, context); Serialize <TOldType>(ms, instance); tmpCtx.Flush(); ms.Position = 0; TNewType result = Deserialize <TNewType>(ms); if (context != null) { context.ReadFrom(tmpCtx); } return(result); } }