【发布时间】:2017-11-16 18:07:11
【问题描述】:
通过这样的调用传递的数据的原始结构会发生什么变化:
MyImg bytes = new MyImg
{
Id = 1,
Img = new byte[] { 1, 0, 5 },
Text = "hiiiiiii"
};
IFormatter formatter2 = new BinaryFormatter();
using (MemoryStream stream = new MemoryStream())
{
formatter2.Serialize(stream, bytes);
bytes.Img = stream.ToArray();
}
它的产生方式有很多抽象:
{ “ID”:1, “IMG”: “AAEAAAD ///// AQAAAAAAAAAMAgAAAEpNZXNzYWdlQm9hcmRCYWNrZW5kLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJU1lc3NhZ2VCb2FyZEJhY2tlbmQuQ29udHJvbGxlcnMuTXlJbWcDAAAAEzxJZD5rX19CYWNraW5nRmllbGQUPEltZz5rX19CYWNraW5nRmllbGQVPFRleHQ + a19fQmFja2luZ0ZpZWxkAAcBCAICAAAAAQAAAAkDAAAABgQAAAAIaGlpaWlpaWkPAwAAAAMAAAACAQAFCw ==”, “文本”: “hiiiiiii”} P>
我只是想了解发生了什么。
串行/反序列化是一个通用过程还是 .Net 做的事情与 Java 不同?
【问题讨论】:
-
序列化为字符串,使用Base64编码。
-
序列化仅意味着“将对象的内存表示转换为字符串”。做事没有单一的标准。 .Net 本身就提供了多种实现方式,BinaryFormatter 只是其中之一。
-
����ÿÿÿÿ������� ���JMessageBoardBackend, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null���%MessageBoardBackend.Controllers.MyImg���<Id>k__BackingField<Img>k__BackingField<Text>k__BackingField������� ������hiiiiiii�������有趣的内容,那里。 -
.Net Core 是开源的,因此您可以从技术上查看每一行代码,看看它是如何发生的。 .Net 的其他版本不是,因此您需要使用反射来了解发生了什么。
-
这里是BinaryFormatter的源代码
标签: .net arrays json bytestream