No se puede deserializar el siguiente gráfico de objeto. Esa excepción se produce cuando el método deserializar pidió a BinaryFormmater: System.Runtime.Serialization.SerializationException:BinaryFormatter y Deserialization Objetos complejos
The constructor to deserialize an object of type 'C' was not found.
No somos dos constructor de C, y creo que el problema puede ser: Mientras que la serialización BinaryFormatter usando el paramatered y en el proceso de deserialización, necesita uno sin parámetros. ¿Hay un truco/solución? Objetos:
[Serializable]
public class A
{
B b;
C c;
public int ID { get; set; }
public A()
{
}
public A(B b)
{
this.b = b;
}
public A(C c)
{
this.c = c;
}
}
[Serializable]
public class B
{
}
[Serializable]
public class C : Dictionary<int, A>
{
public C()
{
}
public C(List<A> list)
{
list.ForEach(p => this.Add(p.ID, p));
}
}
// serialización éxito
byte[] result;
using (var stream =new MemoryStream())
{
new BinaryFormatter().Serialize (stream, source);
stream.Flush();
result = stream.ToArray();
}
return result;
// Deserialización falla
object result = null;
using (var stream = new MemoryStream(buffer))
{
result = new BinaryFormatter().Deserialize (stream);
}
return result;
Las llamadas están en el mismo ambiente, la misma rosca, mismo método
List<A> alist = new List<A>()
{
new A {ID = 1},
new A {ID = 2}
};
C c = new C(alist);
var fetched = Serialize (c); // success
var obj = Deserialize(fetched); // failes