mitchellsjohnson
asked on
How can I serialize a class that extends System.Configuration.ConfigurationSection in VB.NET?
I have ASP.net 3.5 application (VB.NET) using SQLServer (2005) Session State management. We are receiving a serialization exception (below) when using a certain component of our application that saves a custom object to session. This custom object inherits from an abstract class that inherits from a framework component ConfigurationSection. Appears that System.Configuration.Confi gurationSe ction is not serializable. Is there anyway to mark framework class System.Configuration.Confi gurationSe ction as serializable?
[SerializationException: Type 'System.Configuration.Conf igurationS ection' in Assembly 'System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d 50a3a' is not marked as serializable.] System.Runtime.Serializati on.Formatt erServices .InternalG etSerializ ableMember s(RuntimeT ype type) +7736451 System.Runtime.Serializati on.Formatt erServices .GetSerial izableMemb ers(Type type, StreamingContext context) +258 System.Runtime.Serializati on.Formatt ers.Binary .WriteObje ctInfo.Ini tMemberInf o() +111 System.Runtime.Serializati on.Formatt ers.Binary .WriteObje ctInfo.Ini tSerialize (Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +161 System.Runtime.Serializati on.Formatt ers.Binary .WriteObje ctInfo.Ser ialize(Obj ect obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +51 System.Runtime.Serializati on.Formatt ers.Binary .ObjectWri ter.Write( WriteObjec tInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +7634212 System.Runtime.Serializati on.Formatt ers.Binary .ObjectWri ter.Serial ize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +461 System.Runtime.Serializati on.Formatt ers.Binary .BinaryFor matter.Ser ialize(Str eam serializationStream, Object graph, Header[] headers, Boolean fCheck) +134 System.Web.Util.AltSeriali zation.Wri teValueToS tream(Obje ct 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.AltSeriali zation.Wri teValueToS tream(Obje ct value, BinaryWriter writer) +1662 System.Web.SessionState.Se ssionState ItemCollec tion.Write ValueToStr eamWithAss ert(Object value, BinaryWriter writer) +34 System.Web.SessionState.Se ssionState ItemCollec tion.Seria lize(Binar yWriter writer) +606 System.Web.SessionState.Se ssionState Utility.Se rialize(Se ssionState StoreData item, Stream stream) +239 System.Web.SessionState.Se ssionState Utility.Se rializeSto reData(Ses sionStateS toreData item, Int32 initialStreamSize, Byte[]& buf, Int32& length) +72 System.Web.SessionState.Sq lSessionSt ateStore.S etAndRelea seItemExcl usive(Http Context context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +116 System.Web.SessionState.Se ssionState Module.OnR eleaseStat e(Object source, EventArgs eventArgs) +560 System.Web.SyncEventExecut ionStep.Sy stem.Web.H ttpApplica tion.IExec utionStep. Execute() +68 System.Web.HttpApplication .ExecuteSt ep(IExecut ionStep step, Boolean& completedSynchronously) +75
[SerializationException: Type 'System.Configuration.Conf
[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.AltSeriali
You cannot do that.
Inside the error you will find the text: "is not marked as serializable." So as techprocess said, you won't be able to do that.
You might be able to serialize to XML, but I don't know if that's what you want to do :)
You might be able to serialize to XML, but I don't know if that's what you want to do :)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Oh, I noticed that you are using configurationsection, the Class declaration should look something like the one below based on my previous post.
<Serializable()> _
Public Class CustomObject
Inherits ConfigurationSection
Implements ISerializable
<Serializable()> _
Public Class CustomObject
Inherits ConfigurationSection
Implements ISerializable
@Alfred1
I don't believe that will work because ConfigurationSection is not marked for serialization. It doesn't matter if you implement serialization on a custom class; because you are inheriting ConfigurationSection and it is not marked for serialization, the attempt will still fail.
I don't believe that will work because ConfigurationSection is not marked for serialization. It doesn't matter if you implement serialization on a custom class; because you are inheriting ConfigurationSection and it is not marked for serialization, the attempt will still fail.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Hi mitchellsjohnson,
By the way, just to add in my previous comment about ISerializable, you need to include "Imports System.Runtime.Serializati on" in your custom class.
By the way, just to add in my previous comment about ISerializable, you need to include "Imports System.Runtime.Serializati