我正在尝试序列化一个具有如下字段的Java实例。
public class Person{
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
我如何以不同于实际字段名称的名称序列化它们?在GSON
中,可以使用@serializedname(“first-name”)
注释,如下所示。
@SerializedName("first-name")
private String firstName;
在snakeyaml
中是否有类似于上面的内容。snakeyaml
的依赖关系详细信息如下所示,
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.17</version>
</dependency>
下面是程序的主类,答案由flyx
提供
public class Demo {
public static void main(String[] args) {
Person person = new Person();
person.setFirstName("Kasun");
person.setLastName("Siyambalapitiya");
Constructor constructor = new Constructor(Person.class);
Representer representer = new Representer();
TypeDescription personDesc = new TypeDescription(Person.class);
personDesc.substituteProperty("first-name", Person.class, "getFirstName", "setFirstName");
personDesc.substituteProperty("last-name", Person.class, "getLastName", "setLastName");
constructor.addTypeDescription(personDesc);
representer.addTypeDescription(personDesc);
Yaml yaml = new Yaml(constructor, representer);
String yamlString = yaml.dumpAs(person, Tag.MAP, DumperOptions.FlowStyle.BLOCK);
Path updateDescriptorFilePath =
Paths.get(File.separator + "tmp" + File.separator + "sample.json");
try {
FileUtils.writeStringToFile(updateDescriptorFilePath.toFile(), yamlString);
} catch (IOException e) {
System.out.println(e.getCause());
}
}
}
以上结果将产生以下输出
/tmp cat sample.json
first-name: Kasun
last-name: Siyambalapitiya
firstName: Kasun
lastName: Siyambalapitiya
/tmp
Constructor constructor = new Constructor(Person.class);
Representer representer = new Representer();
TypeDescription personDesc = new TypeDescription(Person.class);
personDesc.substituteProperty("first-name", Person.class,
"getFirstName", "setFirstName");
constructor.addTypeDescription(personDesc);
representer.addTypeDescription(personDesc);
Yaml yaml = new Yaml(constructor, representer);
// and then load /dump your file with it
我有一个字段的自定义JsonSerializer(简化代码): 由于我需要用类似的逻辑序列化大约十个其他字段,这取决于字段名,如果我可以在自定义序列化程序中获得属性名,而不是编写十个相同的序列化程序,这将对我有很大帮助。 我已经看到,在方法中,我可以使用JsonGenerator获取整个对象。getCurrentValue()(参见此答案),但我没有找到获取字段名的方法。 我用的是Jackson
有没有一种方法可以指定不同的序列化/反序列化JSON字段名,而不必显式地写出getter和setter方法,或许可以使用lombok getter和setter? 与此示例类似,下面的代码允许将传入的JSON反序列化为不同的POJO字段名。它还会使POJO字段名序列化为: 但这当然是不成立的。
问题内容: 我有两个要使用Jackson序列化为JSON的Java类: 我想将Item序列化为此JSON: 用户序列化为仅包含。我还将能够将所有用户对象序列化为,例如: 所以我想我需要为此编写一个自定义的序列化程序并尝试过: 我使用来自的以下代码对JSON进行了序列化: 但是我得到这个错误: 如何在Jackson上使用自定义序列化程序? 这就是我对Gson的处理方式: 但是我现在需要和Jackso
问题内容: 我有yaml文件的片段: 但我无法使用方法名称创建pojo 有什么方法可以解析此类Yaml文件? 问题答案: 您可以传递自定义PropertyUtils来处理此类情况
本文向大家介绍如何在Java中使用Gson实现自定义JSON序列化?,包括了如何在Java中使用Gson实现自定义JSON序列化?的使用技巧和注意事项,需要的朋友参考一下 如果我们需要一种将 java对象转换为JSON的方法,则Gson库提供了一种通过向GsonBuilder 注册自定义序列化器来指定自定义序列化器的方法。我们可以通过覆盖com.google.gson.JsonSerializer
问题内容: 我有一个复杂的对象图,正在使用Json.NET进行序列化/反序列化。有些对象是从抽象类派生的,因此为了使反序列化正常工作,我需要创建一个custom 。它的唯一作用是在反序列化时选择抽象类的适当具体实现,并允许Json.NET继续进行。 我要序列化时出现问题。我根本不需要做任何自定义。我希望获得与没有custom时将使用的行为完全相同的行为。 但是,由于我将自定义JsonConvert