2012-10-08 47 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

正是我必须做的,消除这个异常? –