2011-07-27 7 views
1

誰もがこのメソッドを助けることができますか?私は型にファイルをデシリアライズする一般的な方法を持っています。解析が完了する前にストリームの終わりが検出されました。 SerializationException

public static T DeserializeFromFile<T>(string fileName) where T : class 
{ 
    if (!File.Exists(fileName)) 
     return null; 

    try 
    { 
     using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) 
     { 
      BinaryFormatter formatter = new BinaryFormatter(); 
      stream.Seek(0, SeekOrigin.Begin); 

      return (T)formatter.Deserialize(stream); 
     } 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
} 

このSerializationExceptionを取得する理由は何ですか?

ありがとうございます。

+2

...あなたも0にストリームを模索する必要はありません。あなたはすでにオープンしています。 – carlosfigueira

+0

これはシリアル化の問題です。この型は、シリアライズ可能な属性を持たないexternaアセンブリ型です。 –

+1

@George:どうやってそれをシリアル化しましたか?この例外はデシリアライゼーションプロセスで投げているので、オブジェクトは以前は正常にシリアル化されていると仮定しました。 –

答えて

2

stream.Seek(0, SeekOrigin.Begin);を削除してください。ただし、どうにかデータをシリアル化するにはどうすればいいですか。問題がありますか?適切な方法は次のようになります。

public static bool TrySerializeToFile<T>(string fileName, T data) where T : class 
{ 
    bool operationSucceed = false; 
    try 
    { 
     using (FileStream stream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write)) 
     { 
      BinaryFormatter formatter = new BinaryFormatter(); 

      formatter.Serialize(stream, data); 

      operationSucceed = true; 
     } 
    } 
    catch 
    { } 

    return operationSucceed; 
} 
0

Stream.Positionプロパティを使用しようとしましたか?

stream.Seek(0, SeekOrigin.Begin); 

その文:代わりに、この文の他の言葉で - ときに、ファイルが正しく書き込まれていなかったため

おそらく
stream.Position=0; 
関連する問題