java - 使用 Gson 序列化 JSON 时包裹某些值

标签 java json gson

使用 GSON 将对象模型序列化为 JSON 时如何包装某些值?模型示例:

class Order {
  Customer cust;
}

class Customer {
  String name;
  int age;
}

序列化客户通常会产生如下结果:

{cust:{name:joe, age:21}}

我想要做的是将 Order 和 Customer 值包装在带有类名的附加元素中。所以预期的 JSON 是:

{Order:{cust:Customer:{name:joe, age:21}}}

我要序列化的实际类可以是任何内容,因此我无法在序列化器中对特定属性进行硬编码。但我想用它们的类名来包装某些属性。

我该怎么做?

最佳答案

但这不是一个有效的 json 字符串:

{Order:{cust:Customer:{name:joe, age:21}}}

在您的应用程序中,您必须正确建模/实现您的域类,然后才能将其用于序列化/反序列化 json 字符串,换句话说,在调用 toJson/fromJson 方法之前应该知道域类。然而,通过使用 Java 通用类型,可以在运行时动态确定实际的域类类型。

查看Serializing and Deserializing Generic Types部分来自 Gson 用户指南:

public class Foo<T> {
  public T value;
}

序列化它:

Gson gson = new Gson();
Type fooType = new TypeToken<Foo<Bar>>() {}.getType();
gson.toJson(foo, fooType);

反序列化它:

Gson gson = new Gson();
Type fooType = new TypeToken<Foo<Bar>>() {}.getType();
gson.fromJson(json, fooType);

关于java - 使用 Gson 序列化 JSON 时包裹某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022420/

相关文章:

java - Android:TextInputLayout 不会将提示居中

java - Hibernate Criteria Api 是否完全防止 SQL 注入(inject)

php - Json php 格式的数据

java - 无法在 Java Servlet 中反序列化 JSON

java - 我可以在 Java 中将变量命名为 'public' 以进行 JSON 序列化/反序列化吗?

android - 无法访问 POJO 类中的 getter

java - requestLocationUpdates 在错误的时间生成位置

java - 字符串池概念简单解释

javascript - 将数组中的 json 对象字符串化,等于日期

java - 使用 Gson 构建一个 JSON 对象,其中值不应包含引号