Спорадическая ошибка сериализации в C # - PullRequest
0 голосов
/ 27 октября 2011

У нас есть импорт 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)

1 Ответ

1 голос
/ 28 октября 2011

Вы случайно не используете библиотеку, которая полагается на отражение, чтобы отобразить файл Excel в граф объектов?

Например, у меня были проблемы с повреждением данных Filehelpers при отображении в текстовый файл.Это происходит не очень часто, но это случается, и это только периодически.

В этом случае проблема с FileHelpers заключается в FileHelpers.RecordInfo.RecursiveGetFields (...), который, в свою очередь, вызывает FileHelpers.FieldInfoCacheManipulator.ResetFieldInfoCache (...), который использует отражение для изменения закрытых членов фактической библиотеки .NET Reflection в попытке заставить отражение .NET возвращать поля в том порядке, в котором они были объявлены.

Однако Microsoft явногласит: «Ваш код не должен зависеть от порядка, в котором возвращаются поля / свойства» * http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx и http://msdn.microsoft.com/en-us/library/6ztex2dc.aspx

Если вы используете библиотеку, которая делает что-то подобное, это объясняет вашу прерывистостьошибки, поскольку библиотека может не соответствовать десериализации с неправильным свойством / полем источника, которое может иметь другой тип.

...