Java GSON-具有命名策略的可选字段和必填字段
我需要一个函数,它读取json文件并控制json文件的结构。应定义必填字段。为此 我发现一个问题解决了我的一部分问题。但在这种情况下,命名约定不再有效。在我的案例中,我使用了以下GsonBuilder:Java GSON-具有命名策略的可选字段和必填字段,java,gson,deserialization,Java,Gson,Deserialization,我需要一个函数,它读取json文件并控制json文件的结构。应定义必填字段。为此 我发现一个问题解决了我的一部分问题。但在这种情况下,命名约定不再有效。在我的案例中,我使用了以下GsonBuilder: this.gsonUpperCamelCase = new GsonBuilder() .registerTypeAdapter(TestClass.class, new AnnotatedDeserializer<TestClass>())
this.gsonUpperCamelCase = new GsonBuilder()
.registerTypeAdapter(TestClass.class, new AnnotatedDeserializer<TestClass>())
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
则无法反序列化此JSON文件:
{
"TestName":"name"
}
但我想确定在这个案例中使用了UPPER_CAMEL_案例。Thx.
SerializedName
是可以帮助您实现这一点的注释。如下修改TestClass
,您应该能够使用TestName
、tn
、tn2
反序列化JSON,并且在序列化时,它总是使用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));
}
MissBonbon,你说的“控制结构”是什么意思?我想确定,JSON文件中给出了“TestName”。这么简单?!?!我非常感激!THX:)
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"}