gpt4 book ai didi

java - 序列化器如何知道何时必须将类视为 "primitive"?

转载 作者:行者123 更新时间:2023-11-30 02:58:26 27 4
gpt4 key购买 nike

让我们以jackson序列化器为例,假设我们有一个这样的类:

public class Car {
private String brand;
private Integer weight;
}

如果我们序列化它,我们会得到例如:

{
"brand": "Fiat",
"weight": 50
}

但是它怎么知道 String 不是由不同原始值组成的对象呢?我的意思是它内部有属性,Integer 类也是如此。那为什么不这样序列化呢?

{
"brand": {
"value": [ // primitive char[] inside String
"F",
"i",
"a",
"t",
],
"hash": xxx // primitive int inside String
}
"weight": {
"value": 50 // primitive int inside Integer
}
}

最佳答案

简单来说,您将在执行序列化的库的核心拥有这样的逻辑:

public String serializeValue(Object ob) {
if (ob == null) {
return NULL_REPRESENTATION;
} else if (ob.getClass() == String.class) {
return ob.toString();
} else if (ob.getClass() == Integer.class) {
return ob.toString();
} else if (ob instanceof List) {
return serializeArray( ((List)ob).toArray());
} ...
else {
return serializeFieldsWithReflection(ob);
}
}

实际上,您永远不会完全像这样看到它,因为这是组织代码的一种非常糟糕的方式,我这样编写只是为了演示基本思想。

相反,将会有一堆可插入的序列化器:库为每个特殊情况提供一个序列化器(字符串,数字,日期,列表, map ,枚举),以及一个“通用”序列化器,它只是迭代所有(非 transient )字段。

此机制通常还允许您为自定义类插入自己的特殊序列化器。

关于java - 序列化器如何知道何时必须将类视为 "primitive"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36605556/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com