如何把一个对象转换成byte[]?

superct 2003-03-17 08:02:30
例如对象
class Test
{
int id;
string name;
char[] chars = "abcd".ToCharArray();
}
现在要将其转换成字节数组,怎么做?
...全文
864 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwj007 2003-03-18
  • 打赏
  • 举报
回复
关注
project 2003-03-18
  • 打赏
  • 举报
回复
对于题目中的class要在前面加一个布局属性,并且char数组必须是固定的(也可以用StringBuilder)
[StructLayout(LayoutKind.Sequential)]
public struct Test
{
int id;
string name;
char[4] chars = "abcd".ToCharArray();
}
如果这是API的参数,直接用就可以了不用copy到Byte数组。API中用的都是指针(也就是你的struct开头的地址)
project 2003-03-18
  • 打赏
  • 举报
回复
对象好像不能直接转成Byte[]等连续的东东,因为它的存储并不是连续的,而且还有深度问题。所以你所说的无法实现,就连object的size也是无法得到的(不信你可以用System.Runtime.InteropServices.Marshal.SizeOf一个object试试,应该报错!)。像int、struct这样的连续存储的对象倒是可以实现的。
你的想法和序列化是两个概念!
timmy3310 2003-03-18
  • 打赏
  • 举报
回复
但是如果采用序列化的方法,那么别的开发语言能够识别么?毕竟,序列化后的字节流包含了太多可能和C#语言特性有关的内容。

你的想法不无道理
实际上如果这样的话,你可以选择:
1、使用XML序列化的方法,在其他开发语言中来解读这个XML文件。
2、实际上你只是想传输数据,那么你应该以数据的保存为中心,可以定义自己的格式来保存数据。

另外,如果你使用二进制序列化,只要是在.Net下是绝对可以反序列化的
dragontt 2003-03-18
  • 打赏
  • 举报
回复
如果你担心其他语言不能支持的话
就是用XML序列化的方式吧
不管怎么样
都可以当作一个xml格式的文档来解析嘛
superct 2003-03-18
  • 打赏
  • 举报
回复
但是如果采用序列化的方法,那么别的开发语言能够识别么?毕竟,序列化后的字节流包含了太多可能和C#语言特性有关的内容。
gujianxin 2003-03-18
  • 打赏
  • 举报
回复
详见
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemTextASCIIEncodingMembersTopic.htm
gujianxin 2003-03-18
  • 打赏
  • 举报
回复
你看看这个类的方法吧

//声明
private ASCIIEncoding m_ascn ;


//使用
m_ascn.GetChars(chars);
甴曱 2003-03-17
  • 打赏
  • 举报
回复
up
DannyChen 2003-03-17
  • 打赏
  • 举报
回复
gz
yarshray 2003-03-17
  • 打赏
  • 举报
回复
timmy3310(tim)说的是对的

对象只有序列化输出才可以

当然如果你不序列化,那么这个对象没有意义

因为它无法保存对象结构,那么读取的时候就不是对象

而是普通的字节流.
dragontt 2003-03-17
  • 打赏
  • 举报
回复
如果是进行网络传输
哪就用字节流方式的序列化方法好了

参考
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconbinaryserialization.htm
silverfish 2003-03-17
  • 打赏
  • 举报
回复
如果网络传输似乎就是需要序列化
superct 2003-03-17
  • 打赏
  • 举报
回复
网络传输
CaiDaoLi 2003-03-17
  • 打赏
  • 举报
回复
你转成字节数组干什么用?
superct 2003-03-17
  • 打赏
  • 举报
回复
我不是想序列化这个对象,并且也不需要能够转回来,我想直接获得对象的字节流。
还有,.net并不提供Convert.ToBytes,Convert.ToByte更不可能是我所需要的了。
timmy3310 2003-03-17
  • 打赏
  • 举报
回复
另外提一句,如果你要转成字节流并起能够转换回来,只能使用序列化的方法

使用Covert.ToBytes的方法是达不到效果的

直接转也是不可能的
timmy3310 2003-03-17
  • 打赏
  • 举报
回复
class Test
{
int id;
string name;
char[] chars = "abcd".ToCharArray();
}
声明为可序列化:

[Serializable]
class Test
{
int id;
string name;
char[] chars = "abcd".ToCharArray();
}

然后在转换的地方:
MemoryStream stream = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
Test t = new Test();
formatter.Serialize( stream,t );
stream.Flush();

byte[] theBytes = stream.ToArray();

stream.Close();
//theBytes 就是序列化后的字节数组

反序列化:

IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream( theBytes ); //theBytes是序列化后的结果
Test t = (Test) formatter.Deserialize(fromStream);
stream.Close();

//t 就是反序列化后的对象

另外,使用上面这些类,需要引用:
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
dragontt 2003-03-17
  • 打赏
  • 举报
回复
用Convert.ToByte

参考
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemconvertclasstobytetopic.htm
timmy3310 2003-03-17
  • 打赏
  • 举报
回复
你是需要序列化吗?

如果是,可以参考:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpovrserializingobjects.htm

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧