2012-10-08 48 views
0

我寫了一個有幾個類的dll。其中之一被稱爲DataDesign。反序列化過程中的異常

[Serilizible] 
public class DataDesign 
    { 
     [NonSerialized] 
     HorizantalFields _horizantalFields; 
     [NonSerialized] 
     VerticalFields _verticalFields; 
     [NonSerialized] 
     GeneralDataDesignViewType _dataDesignView; 
     [NonSerialized] 
     Dictionary<FieldTemplateType, string> _templateTable; 
     [NonSerialized] 
     public List<string> ProcessedData; 

     List<IField> _fields; 
    } 

當我在我的應用程序中使用此dll時,我在deserilizing過程中遇到問題。 Serilizing最終取得成功。但是在反序列化中,我有一個例外。

唯一的例外是

「無法找到組件 'AnalyzingData,版本= 1.0.0.0,文化=中性公鑰=空'」。

analyzeData是dll的名稱。

DeSerilizeClass() 
{ 
        BinaryFormatter bin = new BinaryFormatter(); 
        dataDesign=new DataDesign(); 

        DataDesign dd= (DataDesign)bin.Deserialize(stream); 
} 

Serilize() 
{ 
        using (FileStream sr = new FileStream(String.Format(@"{0}\{1}", Parameters.SavedConfigurationsDirectory, dataDesignName),FileMode.CreateNew, FileAccess.Write)) 
        { 
         BinaryFormatter bin = new BinaryFormatter(); 
         bin.Serialize(sr, this); 
        } 
} 

//這個datadesign類

我怎樣才能解決這個問題?

MS visual Studio2010。 Windows 7 感謝您的關注!

+0

錯誤信息的哪一部分不夠清楚? – Jon

+0

'版本= 1.0.0.0'是常見的掛機。什麼是你的當前分析數據庫的[AssemblyVersion]?使用Fuslogvw.exe進行故障排除。 –

回答

2

無論反序列化過程需要訪問您的分析數據DLL,即它需要位於該應用程序的bin文件夾或其他可以加載它的位置。

+0

感謝您的幫助 –

+0

沒問題,很高興能有所幫助。 –

1

BinaryFormatter序列化具體圖中的對象。即使您將IField展示出來,BinaryFormatter只會查看實際的SomeTypeOfField : IField實例。這意味着要反序列化這些數據,您需要序列化數據時使用的程序集。這聽起來像是在序列化時,它從AnalyzingData程序集中獲得了一些類型(在圖中)。這意味着要反序列化這個數據,你將需要再次使用這個程序集。

Binder有一些複雜的方法解決這個問題,但在大多數情況下,我會建議選擇一個序列化器映射到你的場景:如果你想反序列化沒有相同的原始類型/程序集,那麼你應該使用基於合同的序列化程序。

或者,您只需找到AnalyzingData.dll,然後添加對其的引用,使其與應用程序一起部署(將copy-local設置爲true)。

+0

正是我必須做的,消除這個異常? –