我需要一个功能,读取一个JSON文件和控制JSON文件的所有制结构。 必填字段应该被定义。 为此,我发现,解决我的问题的一部分的问题GSON可选和必需的字段 。 但是,在这种情况下,命名约定并没有任何动力多。 在我来说,我用以下GsonBuilder:
this.gsonUpperCamelCase = new GsonBuilder()
.registerTypeAdapter(TestClass.class, new AnnotatedDeserializer<TestClass>())
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
从JSON每一个键值,也就是在这种情况下,反序列化的Java对象必须是小写。 否则,它会抛出JsonParseException。
例如,我有这个类:
class TestClass {
@JsonRequired
private String testName;
//getter & setter
那么这个JSON文件不能被反序列化:
{
"TestName":"name"
}
但我想确保UPPER_CAMEL_CASE在这种情况下使用。 谢谢。
SerializedName
是注释,可以帮助你在这。 修改TestClass
如下,你应该能够与反序列化一个JSON TestName
, tn
, tn2
和序列化时,它总是使用testName
。
static class TestClass {
@JsonRequired
@SerializedName(value="testName", alternate = {"TestName", "tn", "tn2"})
private String testName;
}
public static void main(String[] args) {
Gson gsonUpperCamelCase = new GsonBuilder()
.registerTypeAdapter(TestClass.class,
new AnnotatedDeserializer<TestClass>())
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
TestClass tc = gsonUpperCamelCase.fromJson("{\r\n" +
" \"TestName\":\"name\"\r\n" +
"}", TestClass.class);
System.out.println(tc.testName);
System.out.println(gsonUpperCamelCase.toJson(tc));
}
产量
name
{"testName":"name"}