zoukankan      html  css  js  c++  java
  • Gson库使用排序字段(ExclusionStrategy)或者修改(FieldNamingStrategy)字段

    Gson解析json数据很是强大,但有的时候如果使用不当,也很麻烦。

    1 “循环序列化” 异常

          解决方法为在可能造成的循环序列化的字段加上 transient。

    transient private Menu parent;//父节点

    2 排序特定字段

       比如 :User的json数据为{id:”1” , name:”syxchina”, password:”syx”},我们解析的时候是不想把password解析,我们想得到格式为:{id:”1” , name:”syxchina”}。

        第一种方法是使用Gson自带的注解,但任何时候取数据都没的那个字段。

        第二种方法使用GsonBuilder,设置ExclusionStrategy参数。

    //原串:{id:"1" , name:"syx", password:"syx"} 
      //效果:{id:"1" , name:"syx"} 
      private static Gson gsonMenuComboTree = new GsonBuilder()//
    	.setExclusionStrategies(new MenuTreeExclusionStrategy())//
    	.create();
    
    private static class MenuTreeExclusionStrategy implements ExclusionStrategy{
    	    
    		public boolean shouldSkipField(FieldAttributes f) {
    			if("password".equals(f.getName())) return true;
    			return false;
    		}
    
    		public boolean shouldSkipClass(Class<?> clazz) {
    			return false;
    		}
    		
    	}

    3 修改字段json显示

    //JSON: {id:"1" , name:"syx", password:"syx"} 
    //OUT : {id:"1" , name:"syx", modifyField:"syx"} 
    
    private static Gson gsonMenuComboTree = new GsonBuilder()//
    	.setFieldNamingStrategy(new MenuTreeFieldNamingStrategy())//
    	.create();
    private static class MenuTreeFieldNamingStrategy implements FieldNamingStrategy {
    		public String translateName(Field f) {
    			if ("password".equals(f.getName())) {
    				return "modifyField";
    			}
    			return f.getName();
    		}
    	}
    作者:BuildNewApp
    出处:http://syxchina.cnblogs.comBuildNewApp.com
    本文版权归作者、博客园和百度空间共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则作者会诅咒你的。
    如果您阅读了我的文章并觉得有价值请点击此处,谢谢您的肯定1。
  • 相关阅读:
    简析IGRP
    unicode字符集查找
    中国移动建成全球最大软交换网络 适合向3G过渡
    寻找端口与进程的关联
    framerelay
    网络工程师的素质
    E1通信的基础知识
    Indy UDP端口冲突解决
    『软考』接入网的分类
    随便写写。。
  • 原文地址:https://www.cnblogs.com/syxchina/p/2249087.html
Copyright © 2011-2022 走看看