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)