1. 程式人生 > 實用技巧 >Python2.7 自定義類的序列化與反序列號

Python2.7 自定義類的序列化與反序列號

關於自定義類的序列化與反序列化,有一篇部落格介紹的方法比較通用:

https://www.cnblogs.com/magic8sky/p/10475704.html

但是這個方法在Python2.7中好像有問題(同時沒有驗證Python3中是否OK),在這裡介紹一種方法,但是並不是非常好,需要針對每個自定義類編寫特定的序列化、反序列化類。

下面的程式碼用於將一個List物件(元素是FolderInfo物件)進行序列化與反序列化。

FolderInfo.py

import json


class FolderInfo:
    root = ""
    fileList = []

    def __init__
(self): pass def toJson(self): overdict = self.__dict__ # result = json.dumps(overdict, ensure_ascii=False) result = json.dumps(overdict) return result
FolderInfoListDecoder.py
from FolderInfo import FolderInfo
import json


class FolderInfoListDecoder(json.JSONDecoder):
    
def decode(self, s): folderInfoes = [] folderInfoListObj = super(FolderInfoListDecoder, self).decode(s) for folderInfoStr in folderInfoListObj: folderInfo = FolderInfo() folderInfoObj = super(FolderInfoListDecoder, self).decode(folderInfoStr)
for k, v in folderInfoObj.iteritems(): if k == "root": folderInfo.root = v elif k == "fileList": folderInfo.fileList = v folderInfoes.append(folderInfo) return folderInfoes
FolderInfoListEncoder.py
from FolderInfo import FolderInfo
import json


class FolderInfoListEncoder(json.JSONEncoder):
    def default(self, field):
        if isinstance(field, FolderInfo):
            return field.toJson()
        else:
            return json.JSONEncoder.default(self, field)

反序列化

folderInfoList = json.loads(folderInfoListJson, cls=FolderInfoListDecoder)

序列化

fileInfoListJson = json.dumps(folderInfoList, cls=FolderInfoListEncoder)