像@jsonunwrapped一样的moshi序列化支持
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了像@jsonunwrapped一样的moshi序列化支持相关的知识,希望对你有一定的参考价值。
我有一个像这样的POJO:
class Registration {
String name;
@JsonUnwrapped
ModifiableDetails detailsToModify;
}
class ModifiableDetails {
String currentStatus;
int enrollmentNumber;
}
当我用内容发出休息请求时
{ "name":"Lucy", "currentStatus":"active","enrollmentNumber":001}
Spring RestController将其反序列化为注册POJO,因为它使用Jackson进行反序列化。之后,当我再次使用Moshi适配器序列化对象时,我得到一个像这样的json:
{
"name":"Lucy",
"detailsToModify":{
"currentStatus":"active",
"enrollmentNumber":001
}
}
是否有可能与Moshi序列化对象,如:
{ "name":"Lucy", "currentStatus":"active","enrollmentNumber":001}
或者是否有其他JsonAdapter(杰克逊除外)可用于序列化对象?
提前致谢
答案
最快的方法是使用中间类型的一次性JsonAdapter。
final class RegistrationJson {
static final Object ADAPTER = new Object() {
@FromJson Registration fromJson(RegistrationJson json) {
return new Registration(json.name,
new ModifiableDetails(json.currentStatus, json.enrollmentNumber));
}
@ToJson RegistrationJson toJson(Registration registration) {
return new RegistrationJson(registration.name, registration.detailsToModify.currentStatus,
registration.detailsToModify.enrollmentNumber);
}
};
final String name;
final String currentStatus;
final int enrollmentNumber;
RegistrationJson(String name, String currentStatus, int enrollmentNumber) {
this.name = name;
this.currentStatus = currentStatus;
this.enrollmentNumber = enrollmentNumber;
}
}
将它注册到您的Moshi实例,您可以运行以下命令。
Moshi moshi = new Moshi.Builder().add(RegistrationJson.ADAPTER).build();
JsonAdapter<Registration> adapter = moshi.adapter(Registration.class);
Registration registration = adapter.fromJson("{ "name":"Lucy", "currentStatus":"active","enrollmentNumber":1}");
String json = adapter.toJson(registration);
请注意,001是无效的JSON。
以上是关于像@jsonunwrapped一样的moshi序列化支持的主要内容,如果未能解决你的问题,请参考以下文章