我在做对象序列化为json的时候,用的.net 自带的类DataContractJsonSerializer。需要经历这样的流程:object—>stream->字节数组->字符串。我纳闷为什么没有提供这样的方法object->字符串。
我的问题:
1.object->stream...仅仅是为了方法的通用性吗?
2.很像知道stream 在.net framework 中的作用,如果没有这个东西,可以吗?
你的理解"序列化"的含义.
"序列化 (serialization)将对象的状态信息转换为可以存储或传输的格式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。"
上面的解释,涉及到两个重要概念:存储,传输.
存储,传输的格式是什么?那就是字节流,或者说字节数组.
字符串,只是一种抽象,是对一段字节数组的逻辑含义的概括,比如,我给你四字节的字节数组,你认为这四个字节的数组是代表"字符串",还是代表"32整形值"呢?你当然不知道,这就需要提供这个四字节数组的人告诉你,他的这个四字节数组具体代表什么.
同样,Stream 也只是一中抽象,Stream对象是一组对字节数组的操作,Stream对象内部使用字节数组存储数据,对于不同的派生类FileStream,NetworkStream,都提供了自身优化的方式来衔接内存中的字节数组与磁盘上或网络IO设备上的字节数组.
json序列化后的实际对象应该是字节数组,而非字符串,只是为了便于人阅读,才提供一定的方法可以将该字节数组转换为可供人读的字符串.
所以,对于你的第一个问题,不是为了通用性,而是对序列化过程的职责分离.至于拿到序列化字节数组后,你想用来干什么,就留给使用者去决定,这时候,你可以使用BinaryReader StreamReader TextReader等配合Encoding来将字节数组转换成你想要的string,int32,double等.
Stream的作用,我在前面已经说过了,至于没有这个东西的坏处就是:很多人会写自己的 Stream.
用 JavaScriptSerializer , 注:添加using System.Web.Script.Serialization; 引用