当前位置: 首页 > 面试题库 >

如何在Gson序列化中保持字段顺序

燕建中
2023-03-14
问题内容

好像Gson.toJson(Object object)生成带有对象的随机分布字段的JSON代码。有办法解决字段顺序问题吗?

public class Foo {
    public String bar;
    public String baz;
    public Foo( String bar, String baz ) {
        this.bar = bar;
        this.baz = baz;
    }
}
Gson gson = new Gson();
String jsonRequest = gson.toJson(new Foo("bar","baz"));

字符串jsonRequest可以是:

  • { "bar":"bar", "baz":"baz" } (正确)
  • { "baz":"baz", "bar":"bar" } (顺序错误)

问题答案:

如果GSON不支持字段顺序的定义,那么其他库也可以。例如,Jackson允许使用@JsonPropertyOrder进行定义。对我来说,必须指定自己的自定义序列化程序似乎很繁琐。

是的,我同意按照JSON规范,应用程序不应期望字段的特定顺序。



 类似资料:
  • 我想进一步说明这个问题是关于什么的,我已经漫游了一个小时了,但没有找到任何东西。 更糟糕的是,正如您所看到的,该属性是final(这就是为什么我热衷于通过反序列化在实例化时使用Jackson反射能力)。我已经阅读了关于以不同的方式注释setter和getter的潜在解决方案,但如果可能的话,我希望将此属性保留为最终属性。如果不可能,我会接受一个非最终财产。 我希望答案不建议自定义序列化/反序列化,

  • 是否有方法序列化类的瞬态字段?文档中提到默认情况下不支持它,但是否有办法打开它? 非常感谢

  • 主要内容:使用excludeFieldsWithModifiers()方法,使用@Expose注解默认情况下,GSON排除序列化/反序列化过程中的瞬态和静态字段。 我们来看看下面的例子。 示例 创建一个名为的Java类文件:GsonTester.java - 执行上面示例代码,得到以下结果 - 使用excludeFieldsWithModifiers()方法 GsonBuilder使用序列化/反序列化过程中的方法提供对使用特定修饰符排除字段的控制。 看下面的例子。 示例 创建一个名为的Java

  • 问题内容: 我找不到在Gson进行序列化期间添加自定义字段的简单方法,我希望其他人可以提供帮助。 这是一个示例类来展示我的问题: 当我序列化类AI时,想返回以下内容: 其中url_to_user未存储在我的类A的实例中,但可以与数据一起在类A的实例中生成。 有没有简单的方法可以做到这一点?我宁愿避免只添加一个字段就编写整个序列化程序。 问题答案: 用得到,用它可以动态交互。

  • 首先,我想说这是一个大学项目。 我有三节课<代码>订单抽象类和从订单继承的和类。 我使用Gson序列化/反序列化子类,但我遇到了一点问题。订单类有一个字段,gson使用该字段来确定订单类型,DineIn或Delivery。 序列化工作得很好。问题是,每当我尝试反序列化时,类型字段值都不会读取,并且总是设置为null,即使它存在于JSON文件中。当有很多字段时,就会发生这种情况,因为当我尝试在较小的

  • 我的POJO类似于: 问题是这个对象必须序列化到一个json主体中,以便调用服务器。有些字段对于请求是可选的,如果我甚至用默认值和空值发送它,应用编程接口会做出不同的响应(不幸的是,更改应用编程接口不是一个选项)。 所以基本上我需要从序列化中排除字段,如果其中任何一个设置为默认值。例如,如果字段为,则生成的json应该是: 知道如何让这成为一种无痛的努力吗?我不想手动构建json主体。 任何帮助都