首页 新闻 会员 周边

流 字节数组 字符串

1
悬赏园豆:20 [已解决问题] 解决于 2010-08-30 15:48

我在做对象序列化为json的时候,用的.net 自带的类DataContractJsonSerializer。需要经历这样的流程:object—>stream->字节数组->字符串。我纳闷为什么没有提供这样的方法object->字符串。

我的问题:

1.object->stream...仅仅是为了方法的通用性吗?

2.很像知道stream 在.net framework 中的作用,如果没有这个东西,可以吗?

星晴的主页 星晴 | 初学一级 | 园豆:90
提问于:2010-08-30 10:25
< >
分享
最佳答案
2

你的理解"序列化"的含义.

"序列化 (serialization)将对象的状态信息转换为可以存储或传输的格式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。"

上面的解释,涉及到两个重要概念:存储,传输.

存储,传输的格式是什么?那就是字节流,或者说字节数组.

字符串,只是一种抽象,是对一段字节数组的逻辑含义的概括,比如,我给你四字节的字节数组,你认为这四个字节的数组是代表"字符串",还是代表"32整形值"呢?你当然不知道,这就需要提供这个四字节数组的人告诉你,他的这个四字节数组具体代表什么.

同样,Stream 也只是一中抽象,Stream对象是一组对字节数组的操作,Stream对象内部使用字节数组存储数据,对于不同的派生类FileStream,NetworkStream,都提供了自身优化的方式来衔接内存中的字节数组与磁盘上或网络IO设备上的字节数组.

json序列化后的实际对象应该是字节数组,而非字符串,只是为了便于人阅读,才提供一定的方法可以将该字节数组转换为可供人读的字符串.

所以,对于你的第一个问题,不是为了通用性,而是对序列化过程的职责分离.至于拿到序列化字节数组后,你想用来干什么,就留给使用者去决定,这时候,你可以使用BinaryReader StreamReader TextReader等配合Encoding来将字节数组转换成你想要的string,int32,double等.

Stream的作用,我在前面已经说过了,至于没有这个东西的坏处就是:很多人会写自己的 Stream.

收获园豆:15
Launcher | 高人七级 |园豆:45045 | 2010-08-30 11:06
叙述的很清楚!赞一下!
星晴 | 园豆:90 (初学一级) | 2010-08-30 15:47
其他回答(1)
0

用 JavaScriptSerializer , 注:添加using System.Web.Script.Serialization; 引用

收获园豆:5
jeff-zheng | 园豆:480 (菜鸟二级) | 2010-08-30 11:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册