C# 二进制格式化程序返回调用者并取消form.close
我想用二进制格式化程序序列化结构数组,以便通过网络发送,或者在这种情况下将其保存到文件中。C# 二进制格式化程序返回调用者并取消form.close,c#,.net,debugging,serialization,binaryformatter,C#,.net,Debugging,Serialization,Binaryformatter,我想用二进制格式化程序序列化结构数组,以便通过网络发送,或者在这种情况下将其保存到文件中。 它已订阅表单。我的表单的关闭事件 void writeHistoryToFile(object sender, CancelEventArgs e) { ListView.ListViewItemCollection coll = historyListView.Items; int count = coll.Count; if(count == 0) return
它已订阅表单。我的表单的关闭事件
void writeHistoryToFile(object sender, CancelEventArgs e)
{
ListView.ListViewItemCollection coll = historyListView.Items;
int count = coll.Count;
if(count == 0)
return;
BinaryFormatter bf = new BinaryFormatter();
MemoryStream memStr = new MemoryStream();
searchResult[] container = new MainForm.searchResult[count];
for(int i = 0; i < count; i++)
{
searchResult tagged = (searchResult)coll[i].Tag;
container[i] = tagged;
}
byte[] bytesToWrite;
bf.Serialize(memStr, container); //HERE
bytesToWrite = memStr.ToArray(); //BREAKPOINT
List<FileInfo> hisFls = historyFiles;
if(hisFls.Count != 0)
{
foreach(FileInfo element in hisFls)
{
element.Delete();
}
}
FileInfo serFile = getTempFile(".avsh");
using(FileStream writeStream = serFile.OpenWrite())
{
writeStream.Write(bytesToWrite, 0, bytesToWrite.Length);
writeStream.Flush();
}
}
“回答”以结束此问题:
尝试向代码中添加Try..Catch,并检查发生的错误。
然后使结构可序列化。;) 尝试将Try..Catch添加到函数中(或仅在序列化前后)。你得到了什么异常?@AlexS完成了,它帮助了你。@HansPassant
它吞下了异常
?!??!什么。。?这可能需要我一段时间,因为我确信这是格式化程序本身,而不是我现在发现的结构。很高兴我能帮忙:)你怎么知道的?O:-)
The Type "ExportGrepper.MainForm+searchResult" in Assembly Arbeitsvorräte duchsuchen, Version=1.0.5351.15603, Culture=neutral, PublicKeyToken=null" is not marked as serializable.
at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteArray(WriteObjectInfo objectInfo, NameInfo memberNameInfo, WriteObjectInfo memberObjectInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)
at ExportGrepper.MainForm.writeHistoryToFile(Object sender, CancelEventArgs e)