C# 如何在c中序列化文件流?

C# 如何在c中序列化文件流?,c#,serialization,filestream,C#,Serialization,Filestream,我希望这不是一个重复的问题。 我上过这样的课: [Serializable] class MyClass { int type; List <FileStream> listfile; string content_text; public MyClass(int t) { type = t; } public MyClass() {

我希望这不是一个重复的问题。 我上过这样的课:

    [Serializable]
    class MyClass
    {
       int type;
       List <FileStream> listfile;
       string content_text;
       public MyClass(int t)
    {
        type = t;
    }

       public MyClass()
    {
           type = 0;
    }       
    }
我需要使用方法Socket.Sendbyte[]在套接字中发送Myclass的对象。 所以我必须序列化这个对象。但如果我添加了[Serializable],FileStream就不可序列化,并且我会得到一个异常运行时。 有人能帮我吗?
非常感谢。

当您向类添加Serializable时,它不会改变任何内容,它只是告诉CLR您的类可以序列化

正因为如此,作为对象的一部分且默认情况下不可序列化的任何类都不会在任何情况下被更改,因此在尝试更改时都会导致出现异常

以下链接将向您显示可序列化属性的MSDN文档:

但是,您可以使用“NonSerializedAttribute”将类中的单个属性标记为不可序列化,如下所示:

[Serializable]
class MyClass
{
  int type;

  [NonSerialized]
  List<FileStream> listfile;

  string content_text;
  public MyClass(int t)
  {
    type = t;
  }

  public MyClass()
  {
    type = 0;
  }
}
这将防止异常的发生,但它将通过从序列化输出中删除实际属性来实现,这意味着如果您希望通过套接字传递filestream对象,那么您的REQUEST将很不幸,因为您无法这样做

这就是说,您可以尝试将文件流的内容读入字节数组,然后可以轻松地发送这些字节数组,因为“byte[]”可以串行化,没有任何问题


但是,我建议,如果要开始通过套接字发送任意长度的byte[]数组,使用二进制流协议可能是Google Proto Buffers,而不是现成的默认文本序列化对象。

会出现什么异常?流表示任意长度的字节集合。您可以将其序列化为字节数组,但如果文件非常大,它可能实际上不适合内存。您最好创建一个协议,使用一系列固定大小的缓冲区传输来传输内容,并将其作为文件存储在另一端,在另一端可以作为流打开和读取。如果它足够小作为对象传输,那么考虑它的内容的更好的表示。发送FielestRAMM对象列表的目的是什么?无论如何,您都需要打开该文件。只需保留文件路径、文件模式的属性列表。。。相反,谢谢大家!我将尝试将FileStream的内容放在字节数组中,然后发送这个。