我写了一个有几个类的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的 谢谢你的关注!
答案 0 :(得分:2)
反序列化的任何过程都需要访问您的ANALYSISData Dll,即它需要位于该应用程序的bin文件夹或其他可以加载它的地方。
答案 1 :(得分:1)
BinaryFormatter
序列化图表中的具体对象。即使您将某些内容公开为IField
,BinaryFormatter
也只会查看实际的SomeTypeOfField : IField
个实例。这意味着要反序列化此数据,您需要序列化数据时使用的程序集。这听起来就像你序列化时,从AnalyzingData
程序集中得到了一些类型(在图中)。这意味着要反序列化这些数据,您将再次需要此程序集。
使用Binder
解决此问题有一些复杂的方法,但在大多数情况下,我会建议选择一个映射到您的场景的序列化程序:如果要在没有相同原始类型/程序集的情况下反序列化,那么您应该使用基于合同的序列化器。
或者,只需找到AnalyzingData.dll
,然后添加对它的引用,以便随应用程序一起部署(将copy-local设置为true)。