本文主要是介绍Gson序列化的对象包含json格式的子属性,json串被转义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
{"name":"chulainn","age":20,"interest":"霹雳布袋戏"}
Gson序列化后就变成 {\"name\":\"chulainn\",\"age\":20,\"interest\":\"霹雳布袋戏\"}
返回到前端。解决这种现象有多中方式 。
需要新建一个对象包含 name,age,interest这些属性,把jsonstr字段反序列化为对象 然后再把整个对象序列化为json字符串
2 .自定义一个JsonSerializer对象 注册到Gson的TypeAdapter中
public class CallResult{private String name;private int age;private String jsonStr;get() set()...
}
class CustomParserFoo implementsJsonSerializer<CallResult>{@Overridepublic JsonElement serialize(CallResult src,Type typeOfSrc,JsonSerializationContext context){JsonObject element = new JsonObject();JsonElement cachedArray = new JsonParser().parse(src.getJsonStr());element.add("jsonStr", cachedArray);element.addProperty("name",src.getName());element.addProperty("age",src.getAge());//element.addProperty();System.out.println(CallResult.class.getDeclaredFields().length);try {int fieldLength = CallResult.class.getDeclaredFields().length;Field[] fields = CallResult.class.getDeclaredFields();for(int i = 0; i < fieldLength; i ++){
// Field field = fields[i];
// PropertyDescriptor pd = new PropertyDescriptor(field.getName(), src.getClass());
// Method rM = pd.getReadMethod();//获得读方法
// String name = rM.getAnnotatedReturnType().getType().getTypeName();
// System.out.println("name:" + name);//element.addProperty(field.getName(),);}}catch (Exception e){e.printStackTrace();}return element;}}
可以使用反射来赋值 这只是测试直接写死需要序列化的字段,使用反射需要给转化的字段加注解还得判断get方法返回类型...
创建Gson
Gson gson = new GsonBuilder().registerTypeAdapter(CallResult.class,new CustomParserFoo()).create();
CallResult been = new CallResult();
been.setName("tony")
been.setAge(20);
been.setJsonStr("{\"name\":\"chulainn\",\"age\":20,\"interest\":\"霹雳布袋戏\"}")
String result = gson.toJson(bean)
System.out.println(result)
打印结果 {"jsonStr":{"name":"chulainn","age":20,"interest":"霹雳布袋戏"},"name":"tony","age":20}
只有当转化的类是CallResult才会走自定义的转化
这篇关于Gson序列化的对象包含json格式的子属性,json串被转义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!