为什么实例不能被JSON序列化?

0 投票
1 回答
624 浏览
提问于 2025-04-18 03:04

我这几小时一直在解决“无法序列化为JSON”的问题,所以我对序列化和反序列化一个实例时的难点很感兴趣。

为什么一个类的实例不能被序列化,比如说用JSON?

序列化的过程是这样的:

  1. 记录类的名称(为了以后能重建这个对象)
  2. 记录打包时变量的值。
  3. 把这些信息转换成字符串。
  4. 可选地进行压缩(就像msgpack那样)

反序列化的过程是:

  1. 创建一个新的实例
  2. 把已知的值赋给相应的变量
  3. 返回这个对象。

那么,难点在哪里呢?什么是复杂数据类型?

1 个回答

0

这里的“难点”主要是在你序列化的第三步,就是把里面的值转换成字符串(之后在反序列化的时候再转换回来)。

对于简单的类型,比如数字、字符串和布尔值,这个过程相对简单明了。但如果是复杂的类型,比如连接到远程服务器的套接字或者一个打开的文件描述符,这样的处理就不太好用了。

解决这个问题的办法通常有两个:要么把复杂类型从你想要序列化的类型中移除,保持序列化的类型非常干净;要么以某种方式标记或者告诉序列化工具,哪些属性应该被序列化,哪些不应该。

撰写回答