2011-05-04 62 views
0

我正在使用序列化保存我的班級列表。這部分工作完美,但是當我嘗試反序列化時,它並沒有做任何事情。DeSerializing列表不起作用

private class Company : ISerializable 
{ 
    public string Name; 
    public System.IO.FileSystemWatcher Watch; 
    public string Email; 
} 

的方法:

public Company(SerializationInfo info, StreamingContext ctxt) 
{ 
    Name = (String)info.GetValue("Name", typeof(string)); 
    Watch.Path = (String)info.GetValue("Watch Path", typeof(string)); 
    Email = (String)info.GetValue("Email address", typeof(string)); 
} 

最後的序列化本身:

Stream stream = File.Open(User + ".osl", FileMode.Create); 
BinaryFormatter bformatter = new BinaryFormatter(); 
bformatter.Serialize(stream, CompanyList); 
stream.Close(); 

CompanyList是列表拿着Company類對象。當我檢查文件時,它完美無缺。但是,當我嘗試反序列化到CompanyList時,它不起作用。它經歷了沒有錯誤,它只是不回饋任何信息。

我只是剛開始使用序列化,所以我敢肯定我搞砸了一些東西。

編輯反串行化代碼:

 public void GetObjectData(SerializationInfo info, StreamingContext ctxt) 
     { 
      info.AddValue("Name", Name); 
      info.AddValue("Watch Path", Watch.Path); 
      info.AddValue("Email address", Email); 
     } 

它看起來像這樣。然後我把它稱爲公司名單: (List<Company>)bformatter.Deserialize(stream);

+2

請顯示您的反序列化代碼。 – driis 2011-05-04 20:13:34

+0

我用代碼更新了問題。對不起,花了這麼長時間。 :) – SaintHUN 2011-05-04 20:38:03

+0

如果你嘗試'對象shouldBeCompany = bformatter.Deserialize(stream);'並且在調試器中查看'shouldBeCompany'會怎麼樣?它是什麼類型? – 2011-05-04 20:42:33

回答

1

反序列化構造函數可能會拋出異常,因爲FileSystemWatcher爲空。

你設置Watch對象的Path財產,但不初始化實際Watch對象,至少在你這裏顯示的代碼。

+0

同意。在@SaintHUN提供的構造函數中沒有文件systemwatcher的實例化。如果你在構造函數中添加'Watch = new FileSystemWatcher();',那麼在反序列化之前它就可以完美工作。 – LazyOfT 2011-05-04 21:16:12

+0

哦,是的!你可能是對的謝謝你,會檢查出 – SaintHUN 2011-05-05 13:35:14

+0

工作。現在需要調整一些東西但反序列化是完美的,謝謝你的幫助! – SaintHUN 2011-05-05 13:42:26