gpt4 book ai didi

json - 如何防止 Gson 序列化/反序列化字段的第一个字符(下划线)?

转载 作者:行者123 更新时间:2023-12-04 13:33:09 26 4
gpt4 key购买 nike

我的课:

class ExampleBean {
private String _firstField;
private String _secondField;
// respective getters and setters
}

我想显示如下:
{
"FirstField":"value",
"SecondField":"value"
}

而不是这样
{
"_FirstField":"value",
"_SecondField":"value"
}

我按如下方式初始化解析器:
GsonBuilder builder = new GsonBuilder();
builder.setDateFormat(DateFormat.LONG);
builder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);
builder.setPrettyPrinting();
set_defaultParser(builder.create());

我可以看到 API并在 documentation “FieldNamePolicy”但我很惊讶没有提供跳过“_”的选项
我也知道我可以使用注释...
@ SerializedName (" custom_naming ")

...但不想为我的所有领域写这个......

区分局部变量和类的字段对我来说非常有用。 :( 任何的想法?

编辑:会有许多明显的解决方案,(继承、gson 覆盖方法、正则表达式)。我的问题更侧重于是否有 gson 的本地解决方案或侵入性较小的解决方案?

也许我们可以提议作为新的 FieldNamePolicy?

最佳答案

GsonBuilder提供方法 setFieldNamingStrategy()允许您通过自己的 FieldNamingStrategy执行。

请注意,这取代了对 setFieldNamingPolicy() 的调用。 - 如果您查看 GsonBuilder 的来源这两种方法是互斥的,因为它们设置了相同的内部字段( FieldNamingPolicy 枚举是 FieldNamingStrategy )。

public class App
{
public static void main(String[] args)
{
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(new MyFieldNamingStrategy())
.setPrettyPrinting()
.create();

System.out.println(gson.toJson(new ExampleBean()));
}
}

class ExampleBean
{

private String _firstField = "first field value";
private String _secondField = "second field value";
// respective getters and setters
}

class MyFieldNamingStrategy implements FieldNamingStrategy
{
public String translateName(Field field)
{
String fieldName =
FieldNamingPolicy.UPPER_CAMEL_CASE.translateName(field);
if (fieldName.startsWith("_"))
{
fieldName = fieldName.substring(1);
}
return fieldName;
}
}

输出:
{
"FirstField": "first field value",
"SecondField": "second field value"
}

关于json - 如何防止 Gson 序列化/反序列化字段的第一个字符(下划线)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14965523/

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