title: Object not serialized
body: <p>i have a fileupload control in asp.net, used to upload images. i want to show preview the image in image control of asp.net. here is the aspx code</p>
  
  <p>C# code behind</p>
  
  <pre><code> protected void Btn_Preview_Click(object sender, EventArgs e)
          {
              try
              {
                  if (FU_Img.HasFile)
                  {
                      string path = Server.MapPath("/TempImages");
  
                  FileInfo oFileInfo = new FileInfo(FU_Img.PostedFile.FileName);
                  string fileName = oFileInfo.Name;
  
                  string fullFileName = path + "//" + fileName;
                  string imagePath = "/TempImages/" + fileName;
  
                  if (!Directory.Exists(path))
                  {
                      Directory.CreateDirectory(path);
                  }
                  Session["FileUpload"] = FU_Img;
                  FU_Img.PostedFile.SaveAs(fullFileName);
                  Img_Prof.ImageUrl = imagePath;
              }
          }
          catch (Exception ex)
          {
              using (StreamWriter sw = new StreamWriter("/log.txt"))
              {
                  sw.NewLine = DateTime.Now.ToString() + "---&gt;&gt;" + ex.ToString() + "\n" + ex.StackTrace.ToString();
              }
          }
      }
  </code></pre>
  
  <p>as you can see, i am putting my image control in session. it works fine on development server. when i posted the site to domain i get the issue</p>
  
  <pre><code>Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.
  </code></pre>
  
  <p>Stack Trace</p>
  
  <pre><code>[SerializationException: Type 'System.Web.UI.WebControls.FileUpload' in Assembly 'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.]
     System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +7738443
     System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +258
     System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +111
     System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +422
     System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +51
     System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +410
     System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +134
     System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1577
  
  [HttpException (0x80004005): Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.]
     System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1662
     System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object value, BinaryWriter writer) +34
     System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter writer) +606
     System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData item, Stream stream) +239
     System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item, Int32 initialStreamSize, Byte[]&amp; buf, Int32&amp; length) +72
     System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +87
     System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +560
     System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
     System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +75`
  </code></pre>
  
  <p>here is my <code>web.config</code></p>
  
  <pre><code>&lt;sessionState mode="InProc"
                      cookieless="true"
                      timeout="20"/&gt;
  </code></pre>
  
  <p>after i preview my page, i click on update bnutton, and it does nothing. not even Redirect to the other page.
  Here is my submit button code</p>
  
  <pre><code> if (Session["FileUpload"] != null &amp;&amp; (!FU_Img.HasFile))
              {
                  FU_Img = (FileUpload)Session["FileUpload"];
              }
  UserOthers UO = new UserOthers();
              if (FU_Img.HasFile)
              {
                  try
                  {
                      string Photofilename = Path.GetFileName(FU_Img.FileName);
                      Photofilename = Photofilename.Split('.')[1].ToString();
                      String PathFolder = Server.MapPath(Request.ApplicationPath + @"\upload\u" + Session["UserID"].ToString ());
                      if (!Directory.Exists(PathFolder))
                      {
                          Directory.CreateDirectory(PathFolder);
                      }
                      FU_Img.PostedFile.SaveAs(Server.MapPath(Request.ApplicationPath + @"\upload\u" + Session["UserID"].ToString () + "\\image." + Photofilename));
                      UO.Image = @"/upload/u" + Session["UserID"].ToString () + "/image." + Photofilename;
                  }
                  catch (Exception ex)
                  {
                      //StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
                  }
              }
   con.update_Pic_Vid(UO, Session["UserID"].ToString ());
              Response.Redirect("/AccountSettings.aspx");
  </code></pre>
  
  <p>Please tell me what wrong i am doing.</p>