反序列化过程中的异常

时间:2012-10-08 07:40:51

标签: c# oop c#-4.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,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'。”

AnalyzingData是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);
                    }
}

//这个数据设计类

我如何解决这个问题?

MS visual Studio2010。 Windows 7的 谢谢你的关注!

2 个答案:

答案 0 :(得分:2)

反序列化的任何过程都需要访问您的ANALYSISData Dll,即它需要位于该应用程序的bin文件夹或其他可以加载它的地方。

答案 1 :(得分:1)

BinaryFormatter序列化图表中的具体对象。即使您将某些内容公开为IFieldBinaryFormatter也只会查看实际的SomeTypeOfField : IField个实例。这意味着要反序列化此数据,您需要序列化数据时使用的程序集。这听起来就像你序列化时,从AnalyzingData程序集中得到了一些类型(在图中)。这意味着要反序列化这些数据,您将再次需要此程序集。

使用Binder解决此问题有一些复杂的方法,但在大多数情况下,我会建议选择一个映射到您的场景的序列化程序:如果要在没有相同原始类型/程序集的情况下反序列化,那么您应该使用基于合同的序列化器。

或者,只需找到AnalyzingData.dll,然后添加对它的引用,以便随应用程序一起部署(将copy-local设置为true)。