# 序列化 serialization

之前看文章偶爾會看到「序列化」這個名詞，不太了解甚麼意思，順手查一下定義和應用：

> In computing, **serialization** (or **serialisation**) is the process of translating a data structure or object state into a format that can be stored or transmitted and reconstructed later (possibly in a different computer environment).

根據維基百科的定義，「序列化」是指將某資料的結構或狀態轉成可存取或傳輸並能在異地恢復其原本型態的一種**資料格式轉換過程**。

簡單來說，「序列化」就是將資料轉換成其他電腦可使用的格式，例如把資料儲存成硬碟可讀取的檔案、可用網路傳輸的二進位制或其他格式等等；相反地，把轉換後的資料再恢復為原本型態的過程即稱為「反序列化(deserialization, unserialization)」。

以前端來說最常見的序列化應用就是，當我們把一個JavaScript寫成的物件要透過API傳送給後端，但因為後端可能使用其他程式語言而無法讀懂JavaScript object語法，這個時候通常我們會將資料轉換成常見的傳輸格式，如使用 `JSON.stringfy()` 轉換成JSON格式，再進行傳輸，虛擬碼如下：

```javascript
const item = {
    name: 'pencil',
    value: 5
};

// 傳送給後端
await fetch('https://inventory-management.com/order', {
    method: 'POST',
    body: JSON.stringfy(item)    // serialization
});
```

References

* [Serialization - Wikipedia](https://en.wikipedia.org/wiki/Serialization)
    
* [資料序列化與反序列化的策略 | by Kai | Medium](https://lmlakai1024.medium.com/%E8%B3%87%E6%96%99%E5%BA%8F%E5%88%97%E5%8C%96%E8%88%87%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E7%9A%84%E7%AD%96%E7%95%A5-2f258484506b)
    
* [以前端角度来看序列化 - 掘金](https://juejin.cn/post/7349041579275468826)
    
* [vue为什么需要前端序列化 • Worktile社区](https://worktile.com/kb/p/3573511)
