我正在GSON中为我的域对象编写自定义序列化程序,因此它仅序列化某些对象:
@Override
public JsonElement serialize(BaseModel src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject obj = new JsonObject();
Class objClass= src.getClass();
try {
for(PropertyDescriptor propertyDescriptor :
Introspector.getBeanInfo(objClass, Object.class).getPropertyDescriptors()){
if(BaseModel.class.isAssignableFrom(propertyDescriptor.getPropertyType()))
{
//src.getId()
}
else if(Collection.class.isAssignableFrom(propertyDescriptor.getPropertyType()))
{
//whatever
}
else {
String value = (propertyDescriptor.getReadMethod().invoke(src)) != null?propertyDescriptor.getReadMethod().invoke(src).toString():"";
obj.addProperty(propertyDescriptor.getName(), value);
}
}
} catch (IntrospectionException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return obj;
}
事情是我也想序列化HashMaps,但是这样我就得到了像这样的值:
{“ key” =com.myproject.MyClass@28df0c98}
虽然我希望Gson适用于HashMaps的默认序列化行为。如何告诉GSON在序列化某些对象时“正常”执行操作?
尽管此答案最初被接受并被赞成,但后来也有反对和评论说这是错误的,所以我认为它已经过时了。
我很确定您可以将拥有的JsonSerializationContext context
对象用作serialize
方法的参数。对指定对象调用默认序列化。
所以我想您只需要在要序列化的位置上执行类似的操作:HashMap
通常
context.serialize(yourMap);