请问在类前用[Serializable]有什么用啊?我看了应该是序列化,序列化的作用是什么?什么时候应该序列化呢?能来个例子说明一下吗?

解决方案 »

  1.   

    说一点我浅薄的理解吧。一般对象都是存放在内存中的,一旦断电,对象也就立刻魂飞魄散了,但是,如果一个对象标以[Serializable],既说明这个对象可以被序列化,然后你就可以利用序列化,把它完整的保存到磁盘,然后以后可以在反序列化出原来的对象,就像是一种变身。另外,序列化还可以用来传承传输对象,比如把一个进程中的对象,序列化之后再传输给远程电脑的另一个进程中,如果没有序列化,基本上是不可能在进程之间传递对象的。
      

  2.   

    以前看到过序列化的概念,说的是:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。
      

  3.   

    参见MSDN中 .Net Remoting:每个Remoting(远程调用)的对象类, 必须继承MashalByRefObject或实现Serializable接口.  如果是继承MashalByRefObject的类, 那么该类的对象在remoting时是引用传递.
    如果是实现Serializable的类, 那么该类的对象在remoting时是复制值传递. (即把整个对象复制一遍传递)
      

  4.   

    说白了就是可以把class序列化成byte[]或XML文件(你要传输和保存都可以啊)
    反序列化就是把利用byte[]或XML文件重新生成class的实例
      

  5.   

    线性化, 那到底什么时候会用呢?WebService, .Net Remoting, 凡是要把一个类的对象转换成流形式, 来保存到文件 或 网络上传输, 就必须做线性化. 线性化做了什么事?
    简单拿个类来举例:
    [Serializable]
    class Person{
      public string name;
      public int age;
      public Person(){}
      public Person(string name, int age){this.name = name;  this.age = age;}
    }那么Person p = new Person("John", 25);  这样一个对象, 
    做了线性化后就会表示成:
    <person name="John" age=25>
    </person>
    (这里是用XML形式, 当然也可以用二进制形式)转换成XML形式, 那么这个对象就能以XML形式在网络上传输, 接收端收到XML, 再反线性化, 把XML还原成Person的一个对象.
      

  6.   

    除了上面提到的Web Service, .Net Remoting, 又想到了 ASP.Net里的ViewState 和 把对象状态保存到文件(XML文件或二进制文件),  都需要该对象的类是可线性化的. 即[Serializable]