“自定义序列化”在不同语言/框架里做法差别很大,我按常见场景给你讲一下,你可以对号入座。
Serializable + 特殊方法Java 原生序列化可重写:
private void writeObject(ObjectOutputStream out) throws IOException {
out.writeUTF(name);
out.writeInt(age);
}
private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException {
name = in.readUTF();
age = in.readInt();
}
✅ 用于控制字段如何写/读
Externalizable完全自己控制:
public class User implements Externalizable {
private String name;
private int age;
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeUTF(name);
out.writeInt(age);
}
@Override
public void readExternal(ObjectInput in) throws IOException {
name = in.readUTF();
age = in.readInt();
}
}
最常见方式:
public class User {
@JsonSerialize(using = CustomSerializer.class)
private Date birthDate;
}
public class CustomSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider sp)
throws IOException {
gen.writeString(new SimpleDateFormat("yyyy-MM-dd").format(value));
}
}
pickle 自定义class User:
def __reduce__(self):
return (User, (self.name, self.age))
dataclass + jsonimport json
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
def to_json(self):
return {"name": self.name, "age": self.age}
或自定义 JSONEncoder:
class CustomEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, User):
return o.to_json()
return super().default(o)
public class User
{
[JsonConverter(typeof(CustomConverter))]
public DateTime Birth { get; set; }
}
或实现:
public interface ISerializable
JSON.stringify(obj, (key, value) => {
if (key === "date") return value.getTime();
return value;
});
✅ 隐藏敏感字段
✅ 改字段名
✅ 时间/枚举格式化
✅ 兼容老系统
✅ 减少体积
如果你告诉我:
我可以直接给你可用代码模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。