Java 如何实现JsonSerializer';在一般情况下是序列化的吗?
在手册中,仅包含基本大小写 如果我的案例不是原始的呢 假设我有一个类,它有一个默认序列化问题(在我的例子中是无止境递归) 类包含多个字段,其中一些字段是“主”字段,保存信息,而另一些字段是服务字段 所以我只需要序列化“main”字段,并从中派生服务字段Java 如何实现JsonSerializer';在一般情况下是序列化的吗?,java,json,serialization,gson,jsonserializer,Java,Json,Serialization,Gson,Jsonserializer,在手册中,仅包含基本大小写 如果我的案例不是原始的呢 假设我有一个类,它有一个默认序列化问题(在我的例子中是无止境递归) 类包含多个字段,其中一些字段是“主”字段,保存信息,而另一些字段是服务字段 所以我只需要序列化“main”字段,并从中派生服务字段 class MyType1 { MyType2 a; // "main" field MyType3 b; // service fiels } class MySerializer implements JsonSerialize
class MyType1 {
MyType2 a; // "main" field
MyType3 b; // service fiels
}
class MySerializer implements JsonSerializer<MyType1> {
@Override
public JsonElement serialize(MyType1 arg0, Type arg1, JsonSerializationContext arg2) {
JsonObject ans = new JsonObject();
// ans.add("a", ... // what to write here? How to wrap a into JsonElement?
return ans;
}
}
类MyType1{
MyType2 a;/“主”字段
MyType3 b;//服务领域
}
类MySerializer实现JsonSerializer{
@凌驾
公共JsonElement序列化(MyType1 arg0,类型arg1,JsonSerializationContext arg2){
JsonObject ans=新的JsonObject();
//ans.add(“a”,…//在这里写什么?如何将a包装到JsonElement中?
返回ans;
}
}
我知道我可以使用transient
关键字来处理这个特定的情况,但问题是如何编写序列化程序
更新
我强调使用transient并不是一个答案。我的问题是关于自定义序列化程序。如何编写它们
class MyTypeToSerialize {
MyType2 a; // "main" field
}
class MyType1 extends MyTypeToSerialize {
MyType3 b; // service fiels
}
如果您只想对字段mytype2a
进行序列化/反序列化,请使用MyTypeToSerialize
(您不需要自定义序列化程序或反序列化程序)
编辑:@Brian Roach的建议是更好、更简单的解决方案:
class MyType1 {
MyType2 a; // "main" field
transient MyType3 b; // service fiels
}
Edit2:
所以我只需要序列化“main”字段,并从中派生服务字段
他们
因此,请充分利用上述建议
我知道我可以在这个特殊的情况下使用transient关键字
问题是关于编写序列化程序
为什么您认为您需要序列化程序?应该使用
上下文。序列化以委派,如下所示:
class MySerializer implements JsonSerializer<MyType1> {
@Override
public JsonElement serialize(MyType1 arg0, Type arg1, JsonSerializationContext arg2) {
JsonObject ans = new JsonObject();
JsonElement a = arg2.serialize(a);
ans.add("a", a);
return ans;
}
}
类MySerializer实现JsonSerializer{
@凌驾
公共JsonElement序列化(MyType1 arg0,类型arg1,JsonSerializationContext arg2){
JsonObject ans=新的JsonObject();
JsonElement a=arg2.serialize(a);
ans.add(“a”,a);
返回ans;
}
}
我在这里找到了答案:“嵌套对象”一节不清楚您在这里要问什么。如果您不想序列化序列化程序中的某些字段,您只是…不会将它们添加到返回的JsonElement中。如何仅将a
添加到JsonElement
?如何将任何内容添加到JsonElement
,知道它是抽象类?只需将b
标记为e> transient
也会做同样的事情。@BrianRoach我知道transient
,但我的问题是关于自定义序列化程序。@aegean我不想更改类层次结构,我想编写自定义序列化程序,保持类结构不变。我不明白为什么不想使用transient属性?为什么需要自定义序列化程序R