Objects are stored in the AppFabric cache in a serialized form. This means that every objects must be Serializable. AppFabric internally uses the NetDataContractSerializer.
When working with HttpRuntime Cache, you keep only a reference in the cache and objects are not serialized.
System.Collections.ArrayList
(very old class) is serializable but every nested/children have to be serializable too. So change your code (Kernel and nested/children Type) in this way.
Here is a piece of code to test Serialization without AppFabric.
// requires following assembly references:
//
//using System.Xml;
//using System.IO;
//using System.Runtime.Serialization;
//using System.Runtime.Serialization.Formatters.Binary;
//
// Target object “obj”
//
long length = 0;
MemoryStream stream1 = new MemoryStream();
using (XmlDictionaryWriter writer =
XmlDictionaryWriter.CreateBinaryWriter(stream1))
{
NetDataContractSerializer serializer = new NetDataContractSerializer();
serializer.WriteObject(writer, obj);
length = stream1.Length;
}