首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Gson不序列化值

Gson是Google提供的一个用于在Java对象和JSON数据之间进行序列化和反序列化的开源库。它可以帮助开发者简化对象与JSON数据之间的转换过程,提高开发效率。

在默认情况下,Gson会序列化对象中的所有字段,包括它们的值。然而,有时我们希望某些字段在序列化过程中被忽略,这时可以使用Gson的注解来实现。其中,@Expose注解用于标记可序列化的字段,而@SerializedName注解用于指定字段在JSON中的名称。

针对该问答内容中提到的不序列化值,如果想要忽略某个字段的序列化,可以在该字段上添加transient关键字进行标记。transient关键字可以使某个字段在序列化过程中被忽略,即不会将其值转化为JSON格式。

下面是一个示例代码,演示了如何使用Gson进行对象的序列化和反序列化,同时忽略某个字段的序列化:

代码语言:txt
复制
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

class Person {
    private String name;
    private transient int age; // 添加transient关键字,忽略age字段的序列化

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 省略getter和setter方法

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John", 25);

        Gson gson = new GsonBuilder().create();

        // 序列化
        String json = gson.toJson(person);
        System.out.println("序列化结果:");
        System.out.println(json);

        // 反序列化
        Person deserializedPerson = gson.fromJson(json, Person.class);
        System.out.println("反序列化结果:");
        System.out.println(deserializedPerson);
    }
}

输出结果:

代码语言:txt
复制
序列化结果:
{"name":"John"}
反序列化结果:
Person{name='John', age=0}

在上述示例中,我们可以看到age字段没有被序列化到JSON中,而是被忽略了。需要注意的是,使用transient关键字修饰的字段在反序列化时会被赋予默认值。

推荐的腾讯云相关产品和产品介绍链接地址:暂无。

总结:Gson是一个功能强大的Java序列化和反序列化库,可以通过使用transient关键字来忽略某个字段的序列化。这在某些情况下非常有用,比如字段包含敏感信息或者不适合被序列化到JSON中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

kotlin gson序列化默认失效深入讲解

Gson序列化原理 原理简述 gson序列化主要分为两个过程: 根据TypeToken创建出对象 根据json字符串解析数据,对对象属性赋值 对象的创建 ConstructorConstructor.get...构造函数默认参数和无参构造函数的关系 参数里面存在没有默认的情况 kotlin代码 id没有默认 class User(val id: Int, val name: String = "sss"...) { init { println("init") } } 反编译的Java代码 包含两个构造函数,一个是我们声明的全参数构造函数,另一个是kotlin生成的辅助构造函数 包含无参构造函数...= 0) { var2 = ""; } this(var1, var2); } } gson序列化输出 代码: @Test fun testJson() { val user...反序列化输出 代码: @Test fun testJson() { val user = Gson().fromJson("{}", User::class.java) print(user.name

1.6K20
  • Gson 序列化Javabean的时候要注意的地方

    Adapter.read(ReflectiveTypeAdapterFactory.java:172) 08-11 01:11:01.126: W/System.err(1230): at com.google.gson.Gson.fromJson...(Gson.java:803) 08-11 01:11:01.126: W/System.err(1230): at com.google.gson.Gson.fromJson(Gson.java:768...) 08-11 01:11:01.136: W/System.err(1230): at com.google.gson.Gson.fromJson(Gson.java:717) 08-11 01:11...53ms, total 53ms 08-11 01:11:01.266: W/System.err(1230): ... 19 more 错误三:当你服务器端传回的json确定没有问题的时候,但是反序列化的时候老是报错...= gson.fromJson(jsonStr, NewsBean.class); 这是我以前错误的代码,如果这样写的话,newsbean始终为空,仅仅这一行代码不过  因为前面看到那个博客里面他反序列的时候只有这一行代码

    76430

    Android 序列化框架 Gson 原理分析,可以优化吗?

    配置项 Gson 类是整个库的核心 API,在进行任何序列化或反序列化之前,我们都需要获得一个 Gson 对象。...因此,在项目中有必要在 common 层提供一个全局的 Gson 对象,既有利于统一序列化配置,也是 Gson 性能优化的基本保障。...() // 启用不过滤空(默认会过滤空) .serializeNulls() // 启用 Json 格式化 .setPrettyPrinting() .create...在序列化时,首先使用反射获取字段,再使用字段的 BoundFiled 序列化; 在反序列化时,首先创建对象实例(下文会讨论如何创建),再使用依次使用字段的 BoundField 反序列为字段类型的,...在 Gson 的反序列化中,首次反序列化一个类型的对象时,Gson 需要使用大量反射调用解析一个 TypeAdapter 适配器对象。随着 Model 的复杂程度增加,首次解析的耗时会不断膨胀。

    2.3K50

    源码追踪 - Gson解析部分属性为null

    本文链接:https://blog.csdn.net/luo4105/article/details/102896372 接口返回的json数据,有些key的是null,而断点调试返回对象是有数据的...原因是项目采用的gson做json解析,gson解析对象为json字符串时,对于对象中匿名内部类属性,会设Null。 解决方法是不使用匿名内部类对象。 前端接收数据,实际对象是有的。...gson如何解析 打印代码执行stack,可以看到gson一层一层解析json逻辑是解析属性,如果属性没有对应解析器,就新建解析对象继续解析,不停递归。递归的类顺序就在下面的堆栈中。...at com.google.gson.TypeAdapter.toJsonTree(TypeAdapter.java:234) com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write...:234) gson源码如何改进 有兴趣可以给google提交一个PR,让它支持这个问题。

    1.5K20

    【Android Protobuf 序列化】Protobuf 性能测试 ( fastjson 序列化与反序列化 | gson 序列化与反序列化 | 三种序列化与反序列化性能对比 )

    文章目录 一、导入依赖库 二、构造 JavaBean 三、fastjson 序列化与反序列化 四、gson 序列化与反序列化 五、完整代码 1、主界面代码 2、JSON 测试代码 3、执行结果 六、参考资料...对象 , 本博客中将其序列化 , 保存到本地文件中 ; 导入 fastjson 与 gson 依赖库 , 即可使用两个 json 序列化与反序列化 API ; implementation '...; HOME = 1; WORK = 2; } message PhoneNumber { optional string number = 1; // 字段是枚举类型...29 ms 四、gson 序列化与反序列化 ---- 使用 gson 进行序列化与反序列化 : // 初始化 kim.hsl.protobuf.AddressBook 对象...} ms") // 测试 gson var gsonStart = System.currentTimeMillis() // gson 序列化

    2.1K30

    还在被数据类的序列化折磨?是时候丢弃 Gson

    不同的是,我们这回用 Gson 去反序列化同样的字符串,结果呢? ? 为什么会这样?...尽管我们在 Data 的构造器里面给出了默认,但 Gson 听了之后会说:啥玩意?啥默认? ?...前面说过了,Gson 实例化的时候根本不会调用我们定义的构造器啊,这个初始化的本身就是构造的一部分。...由于这个本身自己只是一个代理,所以我们需要把它标记为 Transient,意思就是参与序列化过程。...其实猜结果的时候,我们能想到的差异就是,KS 能够正常的执行 Data 的初始化流程,因此可以覆盖到默认、初始化等等,而 Gson 不能,所以 Gson 一定不会处理 d。

    2.3K10

    Gson 笔记

    GSON对象维护任何状态,这个特性有助于在多个地方重用GSON对象。 GSON库提供了实例化的两种方法: 当您需要设置默认配置选项以外的配置选项时,请使用此生成器构造Gson实例。...在序列化时,mark被初始化为25,但反序列化输出显示为25.0,这是一个不正确的,因为类型擦除属性在编译时从类中删除了泛型类型的参数。使用 TypeToken 类来解决这个问题。...getType()方法返回具有泛型参数的原始类类型,它帮助GSON正确地反序列化对象,并将正确输出为25。...Gson gson = new Gson(); // 当多种情况同时出时,以最后一个出现的为准。...方式一(包含) 在 @Expose 注解上配置属性 serialize = false, deserialize = false ,代表这个 emailAddress 参与序列化或者反序列化

    3.7K10

    Gson 系列文章

    Java Map 反序列化 以下是区分 JSON 数据类型的一些简单的方法: 根据你的文档解释或者应用场景 键和是否是一种类型 键和是否是动态的 这里我们需要创建一个map类型的TypeToken类型...今天我们来看下 Set 数据结构,HastSet 是一个保证唯一的集合,在 Java 中有很多应用,不用担心,我们使用 Gson 可以轻松搞定 Set 的序列化。...Builder — 序列化 序列化 之前的例子中,空的映射中,如果你的数据结构中没有给字段赋值或者设置 null,序列化的 JSON 中是不会出现该字段的。...方式一(忽略) 在 @Expose 注解上配置属性 serialize = false, deserialize = false ,代表这个 emailAddress 参与序列化或者反序列化,其他正常显示...(忽略) 同样的代码,只是 @Expose 注解没有配置属性,就是忽略 emailAdress 属性,而 name 和 age 属性会被忽略。

    15.4K10

    FastJSON、Gson和Jackson性能对比

    对比以下json转换方式 一、fastJson 1、fastJson在转换java对象为json的时候,默认是序列化null对应的key的 也就是说当对象里面的属性为空的时候,在转换成json时,序列化那些为..."} , 没有序列化那些为null的属性 2、但是如果想把null对应的key序列化出来呢?...//Include.Include.ALWAYS 默认 //Include.NON_DEFAULT 属性为默认序列化 //Include.NON_EMPTY 属性为 空(“”) 或者为...//Include.Include.ALWAYS 默认 //Include.NON_DEFAULT 属性为默认序列化 //Include.NON_EMPTY 属性为 空(“”) 或者为...或者参照:jackson详解 三、Gson 1、gson和fastjson一样,默认是序列化null对应的key的,具体案例如下: [java] view plain copy print?

    2K60

    别再和面试官说你精通序列化与反序列化

    很多海量数据场景,都需将对象序列化后,把它们暂时从内存转移到磁盘,等要用时,再把数据从磁盘中读取出来,反序列化成对象来使用,这样不仅可以长期保存丢失数据,而且可以节省有限的内存空间。...比如,可固定字段顺序,这样在序列化后的字节里面就不必包含字段名,只要字段即可,不同类型数据也可做针对性优化: 对于同样的User对象,我们可以把它序列化成: 03 | 08 7a 68 61 6e...按顺序,第一个字段name,不存字段名,直接存字段“zhangsan”即可,由于名字长度固定,第一个字节08表该名字长度8个字节,紧随其后的8字节即zhangsan。...4 面试场景快问快答 在内存里存放的任何数据,最基础的存储单元也是二进制,即应用程序操作的对象,在内存中也是二进制存储的,既都是二进制,为什直接把内存中对象对应的二进制数据直接通过网络发出去或保存在文件...数据在内存中大多以地址链接的离散数据为主,且因为内存里的对象不是一串连续的字节流,而是通过地址相互引用,比如map,其是一个地址,表示在哪里,而不是本身。

    1.3K20

    Java序列化对字段名的影响

    (2.8.5)序列化model3成字符串并输出 Gson gson =new Gson(); System.out.println("Serializable Result...With Gson :" +gson.toJson(model3)); //使用jackson(2.9.6)序列化model3成字符串并输出 ObjectMapper...可以看到三种序列化的方式, fastjson输出有的数据,包含user,带is的字段被序列化不带is Gson输出有的数据,包含user,带is的字段被序列化正常 Jackson输出所有有和null...的数据,包含user,带is的字段被序列化不带is 由此可以得出结论: fastjson和Jackson是通过反射遍历getter方法,然后根据JavaBeans规则他会去掉is来获取属性。...现在我们试一下,对于同一个对象,如果用fastjson序列化,然后在使用Gson序列化: public static void main(String[] args) { Model3

    1.1K10
    领券