Link to home
Start Free TrialLog in
Avatar of mitchellsjohnson
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.ConfigurationSection is not serializable. Is there anyway to mark framework class System.Configuration.ConfigurationSection as serializable?
[SerializationException: Type 'System.Configuration.ConfigurationSection' in Assembly 'System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.] System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +7736451 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) +161 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.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +7634212 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +461 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[]& buf, Int32& length) +72 System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +116 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& completedSynchronously) +75
Avatar of techprocess
techprocess

You cannot do that.
Avatar of kaufmed
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  :)
ASKER CERTIFIED SOLUTION
Avatar of Alfred A.
Alfred A.
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
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
@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.
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Hi mitchellsjohnson,

By the way, just to add in my previous comment about ISerializable, you need to include "Imports System.Runtime.Serialization" in your custom class.