2010年2月24日星期三

Issuevision 学习 6/n 序列化数据

Issuevision是个可离线运行的程序。对于离线运行的程序,它需要将一部分数据保存在本地。Issuevision登录后,首先会判断本地是否存在数据,有的话会将数据序列化后保存在本地。   如果处于连线状态的话,issuevision会从网络中获取新的数据,并将数据保存在本地。

将 SerializableAttribute 属性应用于一个类型可指示该类型的实例可以序列化。如果正在序列化的对象图中的任何类型未应用 属性,公共语言运行库则会引发 SerializationException。

即使该类也会实现 ISerializable 接口来控制序列化进程,仍要应用 SerializableAttribute 属性。

默认情况下,类型中由 SerializableAttribute 标记的所有公共和私有字段都会进行序列化,除非该类型实现 ISerializable 接口来重写序列化进程。默认的序列化进程会排除用 NonSerializedAttribute 属性标记的字段。如果可序列化类型的字段包含指针、句柄或其他某些针对于特定环境的数据结构,并且不能在不同的环境中以有意义的方式重建,则最好将 NonSerializedAttribute 属性应用于该字段。


using System;

using System.IO;

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Soap;

//using System.Runtime.Serialization.Formatters.Binary;

public class Test {

   public static void Main()  {

      //Creates a new TestSimpleObject object.

      TestSimpleObject obj = new TestSimpleObject();

      Console.WriteLine("Before serialization the object contains: ");

      obj.Print();

      //Opens a file and serializes the object into it in binary format.

      Stream stream = File.Open("data.xml", FileMode.Create);

      SoapFormatter formatter = new SoapFormatter();

      //BinaryFormatter formatter = new BinaryFormatter();

      formatter.Serialize(stream, obj);

      stream.Close();

      //Empties obj.

      obj = null;

      //Opens file "data.xml" and deserializes the object from it.

      stream = File.Open("data.xml", FileMode.Open);

      formatter = new SoapFormatter();

      //formatter = new BinaryFormatter();

      obj = (TestSimpleObject)formatter.Deserialize(stream);

      stream.Close();

      Console.WriteLine("");

      Console.WriteLine("After deserialization the object contains: ");

      obj.Print();

   }

}

// A test object that needs to be serialized.

[Serializable()]

public class TestSimpleObject  {

    public int member1;

    public string member2;

    public string member3;

    public double member4;

    // A field that is not serialized.

    [NonSerialized()] public string member5; 

    public TestSimpleObject() {

        member1 = 11;

        member2 = "hello";

        member3 = "hello";

        member4 = 3.14159265;

        member5 = "hello world!";

    }

    public void Print() {

        Console.WriteLine("member1 = '{0}'", member1);

        Console.WriteLine("member2 = '{0}'", member2);

        Console.WriteLine("member3 = '{0}'", member3);

        Console.WriteLine("member4 = '{0}'", member4);

        Console.WriteLine("member5 = '{0}'", member5);

    }

}

发表评论