【发布时间】:2025-11-24 20:25:04
【问题描述】:
我们将 Excel 导入到我们的系统中,并进行了非常严格的测试。最近,我们注意到零星的序列化错误。
这些错误在我们针对导入的自动化测试中出现,一遍又一遍地使用同一个文件。如果我们每次都收到这个错误,我会理解,但同样的序列化过程可能会失败一次而不是下一次,这似乎很奇怪。
Exception: 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)
【问题讨论】:
-
这些是单元测试吗?您的任何测试是否修改了 Excel 文件?
-
这些不是单元测试。这些是自动的浏览器内测试。没有测试修改excel文件,他们只是重复上传它们。我们在生产中也看到过几次错误,但它们似乎是一次性的,如果用户再试一次,似乎能够成功上传。
-
很奇怪的堆栈跟踪。很难想象为什么格式化程序认为该成员是 int32 但实际上是一个字符串。对实际物体一无所知会导致猜测失败。
-
我会添加一个额外的检查来查看整个文件是否在反序列化之前到达(长度和校验和)
-
re: Hans,对象图实在是太大了,不然我会贴出来的。
标签: c# serialization binary-serialization