I haven't dug into this one yet, but here is a small repro of an exception that comes from deserializing DbUpdateExceptions:
var formatter = new BinaryFormatter();
Exception ex;
using (var ms = new MemoryStream())
{
formatter.Serialize(ms, new DbUpdateException("foo"));
ms.Position = 0;
// Works fine
ex = (Exception)formatter.Deserialize(ms);
}
using (var ms = new MemoryStream())
{
formatter.Serialize(ms, ex);
ms.Position = 0;
// Exception happens here on 2nd deserialize
ex = (Exception)formatter.Deserialize(ms);
}
Thoughts?
Comments: Exception stack trace is: ``` Unhandled Exception: System.Runtime.Serialization.SerializationException: The constructor to deserialize an object of type 'System.Data.Entity.Infrastructure.DbUpdateException' was not found. ---> System.Runtime.Serialization.SerializationException: The constructor to deserialize an object of type 'System.Data.Entity.Infrastructure.DbUpdateException' was not found. at System.Runtime.Serialization.ObjectManager.GetConstructor(RuntimeType t) at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfoinfo, StreamingContext context) --- End of inner exception stack trace --- at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfoinfo, StreamingContext context) at System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder) at System.Runtime.Serialization.ObjectManager.DoFixups() at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream) at SerializationTest.Program.Main(String[] args) in c:\Stuff\SerializationTest\SerializationTest\Program.cs:line 35 ```
var formatter = new BinaryFormatter();
Exception ex;
using (var ms = new MemoryStream())
{
formatter.Serialize(ms, new DbUpdateException("foo"));
ms.Position = 0;
// Works fine
ex = (Exception)formatter.Deserialize(ms);
}
using (var ms = new MemoryStream())
{
formatter.Serialize(ms, ex);
ms.Position = 0;
// Exception happens here on 2nd deserialize
ex = (Exception)formatter.Deserialize(ms);
}
Thoughts?
Comments: Exception stack trace is: ``` Unhandled Exception: System.Runtime.Serialization.SerializationException: The constructor to deserialize an object of type 'System.Data.Entity.Infrastructure.DbUpdateException' was not found. ---> System.Runtime.Serialization.SerializationException: The constructor to deserialize an object of type 'System.Data.Entity.Infrastructure.DbUpdateException' was not found. at System.Runtime.Serialization.ObjectManager.GetConstructor(RuntimeType t) at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfoinfo, StreamingContext context) --- End of inner exception stack trace --- at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfoinfo, StreamingContext context) at System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder) at System.Runtime.Serialization.ObjectManager.DoFixups() at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream) at SerializationTest.Program.Main(String[] args) in c:\Stuff\SerializationTest\SerializationTest\Program.cs:line 35 ```