Skip to content

Unable to serialize session because SerializationFieldInfo is not marked as serializable #1964

Closed
@cremor

Description

@cremor

I can't update an application from NHibernate 5.1.4 to 5.2.2 (I've also tested 5.2.0). If I update and try to serialize an ISession the following exception is thrown in some cases:

System.Runtime.Serialization.SerializationException: Type 'System.Runtime.Serialization.SerializationFieldInfo' in Assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.
   at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
   at System.Runtime.Serialization.FormatterServices.<>c__DisplayClass9_0.<GetSerializableMembers>b__0(MemberHolder _)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder)
   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder)
   at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)
   at <my code calling binaryFormatter.Serialize(memoryStream, session)>

Since SerializationFieldInfo is internal in mscorlib neither my code nor NHibernate can reference it directly. But something must have changed between NHibernate 5.1 and 5.2 that causes an ISession to indirectly contain a SerializationFieldInfo somewhere.

I'm not sure why some sessions cause this issue for me and others don't. I haven't been able to find a specific entity that causes it yet.

My application targets Framework 4.7.1 and I'm currently on the 4.7.2 runtime (Windows 10 1709).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions