que estoy tratando de serializar un gráfico de objetos en .NET con el siguiente método:¿Cómo identifica el campo que está causando que la serialización binaria falle en .NET?
public static byte[] Serialize(object data)
{
var binary = new BinaryFormatter();
using (var ms = new MemoryStream()) {
binary.Serialize(ms, data);
return ms.ToArray();
}
}
Sin embargo, estoy corriendo en el siguiente error:
FormatException: Input string was not in a correct format.
Stack Trace:
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ToInt32(Object value, IFormatProvider provider)
at System.Runtime.Serialization.Formatters.Binary.__BinaryWriter.WriteValue(InternalPrimitiveTypeE code, Object value)
at System.Runtime.Serialization.Formatters.Binary.__BinaryWriter.WriteMember(NameInfo memberNameInfo, NameInfo typeNameInfo, Object value)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteKnownValueClass(NameInfo memberNameInfo, NameInfo typeNameInfo, Object data)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteMembers(NameInfo memberNameInfo, NameInfo memberTypeNameInfo, Object memberData, WriteObjectInfo objectInfo, NameInfo typeNameInfo, WriteObjectInfo memberObjectInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteMemberSetup(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo, String memberName, Type memberType, Object memberData, WriteObjectInfo memberObjectInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo, String[] memberNames, Type[] memberTypes, Object[] memberData, WriteObjectInfo[] memberObjectInfos)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
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)
¿Hay una manera fácil de identificar qué el campo está produciendo este error? Podría marcar recursivamente los campos en el gráfico de objeto como NonSerialized para reducir los posibles culpables, pero como el gráfico de objeto es bastante extenso, esto es engorroso y parece innecesario.
Tenga en cuenta que no estoy seguro de por qué BinaryFormatter no puede serializar uno o más valores en el gráfico de objetos. Si el objeto se puede almacenar en la memoria en tiempo de ejecución, no está claro por qué no se puede serializar. ¿Podría ser esto un problema con una enumeración?
Disculpa por la gran demora en aceptar esto. Nunca tuve tiempo de verificar este enfoque, pero dado que proporciona información sobre una herramienta potencialmente útil de la que no tenía conocimiento, creo que esta respuesta es la más útil/prometedora. – mcliedtk
Lo he usado para depurar un gran cambio en el modelo de datos que se está serializando y rápidamente me apuntó en la dirección correcta. Una vez que tenga un descanso en la excepción correcta, puede usar! Clrstack -p para obtener un volcado del rastreo de la pila con punteros a los parámetros. Para mi caso, muchos de ellos no tenían datos, pero más arriba en la pila contenía un puntero al objeto que se serializaba. –