这是我第一次接触序列化...事实上我正在通过 C# 开发 Autodesk Revit。
客观的:
我需要将数据记录到 HDD 上的新文件中,以便可以通过 Revit 从另一台计算机打开该文件。
程序:
- 处理所有必需的数据。来自 Main 类。
- 实例化这些数据并将其传递给 Serializable 类。
- 保存以归档来自主类的数据。
- 释放流并将可序列化类设置为空。
- 反序列化。
- 根据获取的数据在 revit 上做一些事情。
问题 - 程序完美运行,没有错误,一切正常。- 再次按下按钮以重新运行在反序列化时失败的程序,并显示此错误代码
[A]Cons_Coor.ThrDviewData 无法转换为 [B]Cons_Coor.ThrDviewData。类型 A 源自位置 'C:\Users\mostafa\AppData\Local\Temp\RevitAddins\Cons_Coor-Executing-20140820_224454_4113 的上下文 'LoadNeither' 中的 'Cons_Coor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' \Cons_Coor.dll'。类型 B 源自位置 'C:\Users\mostafa\AppData\Local\Temp\RevitAddins\Cons_Coor-Executing-20140820_230011_0316 的上下文 'LoadNeither' 中的 'Cons_Coor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' \Cons_Coor.dll'。在 Cons_Coor.dll 中发生了“System.NullReferenceException”类型的第一次机会异常
主类:
///main class
.....
.....
ThrDviewData v3ddata = new ThrDviewData(); ///instantiate a serializable class
///collect all required data
string filename = UT_helper.conpaths(UT_constants.paths.Desktop) + "\\comment2" + DateTime.Today.ToShortTimeString().Replace(":", "") + ".a4h";
using (Stream stream = File.Open(filename, FileMode.Create))
{
BinaryFormatter bformatter = new BinaryFormatter();
Debug.WriteLine("Writting Data\r\n");
bformatter.Serialize(stream, v3ddata);
stream.Close();
}
v3ddata = null;
using (Stream stream = File.Open(filename, FileMode.Open))
{
BinaryFormatter bformatter = new BinaryFormatter();
Debug.WriteLine("Reading data from file");
try
{
v3ddata = (ThrDviewData)bformatter.Deserialize(stream);
}
catch (Exception ex)
{
Debug.Write(ex.Message);
// File.Delete(filename);
}
stream.Close();
}
....
....
///do some stuff with the acquired data
可序列化类
public string myvariables;
public ThrDviewData()
{
myvariables = null;
}
public ThrDviewData(SerializationInfo info, StreamingContext ctxt)
{
myvariables= (String)info.GetValue("name", typeof(string));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("name", myvariables);
}
// Public implementation of Dispose pattern callable by consumers.
public void Dispose()
{
GC.SuppressFinalize(this);
}
}
所以有什么提示吗?