【发布时间】:2011-02-07 01:29:32
【问题描述】:
我想导航到对象的第 N 级,并以字符串格式序列化它的属性。 例如:
class Animal {
public String name;
public int weight;
public Animal friend;
public Set<Animal> children = new HashSet<Animal>() ;
}
应该这样序列化:
{name:"Monkey",
weight:200,
friend:{name:"Monkey Friend",weight:300 ,children:{...if has children}},
children:{name:"MonkeyChild1",weight:100,children:{... recursively nested}}
}
您可能会注意到它类似于将对象序列化为 json。我知道有很多库(Gson,Jackson...)可以做到这一点,你能给我一些关于如何自己写这个的指导性想法吗?
【问题讨论】:
-
这是否有特定的部分被证明是困难的?
-
如果你知道那里有很多库,为什么不直接使用一个?
-
您能告诉我们到目前为止您尝试了什么,以便我们有一个起点吗?
-
@Justin Niessner :我不知道如何检查应该递归序列化的字段。
-
这只是简单的递归:内省一种类型(具有超类型等)的字段、方法(参见 JDK javadocs for Class);使用 java.lang.reflect.Field 查找字段的实际值,冲洗重复。如果你想变得花哨,跟踪已经解析的对象来处理循环(或共享引用)。