0

非常に厳密にテストした Excel をシステムにインポートしています。最近、散発的なシリアライゼーション エラーに気付きました。

これらのエラーは、同じファイルを何度も使用して、インポートに対する自動テストでポップアップしています。毎回このエラーが発生する場合は理解できますが、同じシリアライゼーション プロセスが 1 回失敗し、次は失敗しないというのは奇妙に思えます。

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)
4

1 に答える 1

1

Excel ファイルをオブジェクト グラフにマップするためにリフレクションに依存するライブラリを使用していませんか?

たとえば、テキスト ファイルへのマッピング時に Filehelpers がデータを破損するという問題がありました。頻繁に発生するわけではありませんが、発生し、断続的に発生します。

この場合、FileHelpers の問題は FileHelpers.RecordInfo.RecursiveGetFields(...) にあり、FileHelpers.FieldInfoCacheManipulator.ResetFieldInfoCache(...) を呼び出し、リフレクションを使用して実際の .NET Reflection ライブラリのプライベート メンバーを変更します。 .NET リフレクションに、フィールドが宣言された順序で返されるように強制しようとします。

ただし、マイクロソフトは明示的に「フィールド/プロパティが返される順序にコードを依存させてはならない」と述べていますhttp://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx およびhttp://msdn.microsoft.com /en-us/library/6ztex2dc.aspx

同様のことを行うライブラリを使用している場合、断続的なエラーが説明されます。これは、ライブラリが間違ったソース プロパティ/フィールドと逆シリアル化を一致させない可能性があるためです。これは異なるタイプである可能性があります。

于 2011-10-28T04:03:24.200 に答える