gpt4 book ai didi

java - 具有自定义注释的字段的 Gson 自定义序列化

转载 作者:行者123 更新时间:2023-12-04 10:15:37 34 4
gpt4 key购买 nike

class Demo {
private String name;
private int total;

...
}

当我用gson序列化一个demo的对象时,在正常情况下我会得到这样的东西:

{"name": "hello world", "total": 100}

现在,我有一个注释 @Xyz 可以添加到任何类的任何属性。 (我可以应用这个注释的属性可以是任何东西,但现在如果它只是 String 类型应该没问题)

class Demo {
@Xyz
private String name;

private int total;

...
}

当我在类属性上进行注释时,序列化数据应具有以下格式:

{"name": {"value": "hello world", "xyzEnabled": true}, "total": 100}

请注意,无论类的类型如何,此注释都可以应用于任何 (String) 字段。如果我能以某种方式在自定义序列化程序 serialize 方法上获取该特定字段的声明注释,那对我来说就可以了。

请告知如何实现这一目标。

最佳答案

我认为您打算将 annotation JsonAdapter 与您的自定义行为一起使用

这是扩展 JsonSerializer、JsonDeserializer 的示例类 Xyz

import com.google.gson.*;

import java.lang.reflect.Type;

public class Xyz implements JsonSerializer<String>, JsonDeserializer<String> {

@Override
public JsonElement serialize(String element, Type typeOfSrc, JsonSerializationContext context) {
JsonObject object = new JsonObject();
object.addProperty("value", element);
object.addProperty("xyzEnabled", true);
return object;
}

@Override
public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return json.getAsString();
}
}

这是一个示例使用

import com.google.gson.annotations.JsonAdapter;

public class Demo {
@JsonAdapter(Xyz.class)
public String name;
public int total;
}

我写了更多的测试,也许它们会帮助你更多地解决这个问题

import com.google.gson.Gson;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class Custom {
@Test
public void serializeTest() {
//given
Demo demo = new Demo();
demo.total = 100;
demo.name = "hello world";
//when
String json = new Gson().toJson(demo);
//then
assertEquals("{\"name\":{\"value\":\"hello world\",\"xyzEnabled\":true},\"total\":100}", json);
}

@Test
public void deserializeTest() {
//given
String json = "{ \"name\": \"hello world\", \"total\": 100}";
//when
Demo demo = new Gson().fromJson(json, Demo.class);
//then
assertEquals("hello world", demo.name);
assertEquals(100, demo.total);
}

}

关于java - 具有自定义注释的字段的 Gson 自定义序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61076945/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com