怎样将托管对象转换为字节流?

解决方案 »

  1.   

    既然是托管对象,用Serialization比较简单。条件就是对象要被标志为Serializable,对象的成员,成员的成员也是Serializable的(基本类型都是);[Serializable]
    class My
    {
       int id;
       string name;
       string[] addressLines;
    }
      

  2.   

    假设对象是Serializable,可以仿照如下操作byte[] bytesStream = null;
    using(MemoryStream ms = new MemoryStream)
    {
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(ms, dataSet);
        bytesStream = new bytes[ms.Length];
        ms.Position = 0;
        ms.Read(bytesStream, 0, bytesStream.Length);
    }
    // 上述是序列化对象dataSet为字节流using(MemoryStream ms = new MemoryStream(bytesStream))
    {
      ms.Position = 0;
      BinaryFormatter bf = new BinaryFormatter();
      DataSet dataSet = (DataSet)bf.Deserialize(ms);
    }
    // 上述是反序列字节流为一个DataSet对象
      

  3.   

    楼上的正解,但前提是对象标记为Serializable,如果对象没有标记为Serializable,就不行了
      

  4.   

    如果没有标记为:Serializable
    你只能一个个字段转换
    比如
    int a ==》 byte[] aBytes = BitConverter.GetBytes(a);
    string b ==> byte[] strBytes = Encoding.Default.GetBytes(b);