以下を含むポリモーフィック型のGenson 1.3 を使用して、Java で JSON シリアル化を実装しようとしています。
Number
s- 配列
Enum
クラス
以下の SSCCE は、私が達成しようとしていることを大まかに示しています。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.owlike.genson.Genson;
import com.owlike.genson.GensonBuilder;
/**
* A Short, Self Contained, Compilable, Example for polymorphic serialization
* and deserialization.
*/
public class GensonPolymoprhicRoundTrip {
// our example enum
public static enum RainState {
NO_RAIN,
LIGHT_RAIN,
MODERATE_RAIN,
HEAVY_RAIN,
LIGHT_SNOW,
MODERATE_SNOW,
HEAVY_SNOW;
}
public static class Measurement<T> {
public T value;
public int qualityValue;
public String source;
public Measurement() {
}
public Measurement(T value, int qualityValue, String source) {
this.value = value;
this.qualityValue = qualityValue;
this.source = source;
}
}
public static class DTO {
public List<Measurement<?>> measurements;
public DTO(List<Measurement<?>> measurements) {
this.measurements = measurements;
}
}
public static void main(String... args) {
Genson genson = new GensonBuilder()
.useIndentation(true)
.useRuntimeType(true)
.useClassMetadataWithStaticType(false)
.addAlias("RainState", RainState.class)
.useClassMetadata(true)
.create();
DTO dto = new DTO(
new ArrayList(Arrays.asList(
new Measurement<Double>(15.5, 8500, "TEMP_SENSOR"),
new Measurement<double[]>(new double[] {
2.5,
1.5,
2.0
}, 8500, "WIND_SPEED"),
new Measurement<RainState>(RainState.LIGHT_RAIN, 8500, "RAIN_SENSOR")
)));
String json = genson.serialize(dto);
System.out.println(json);
DTO deserialized = genson.deserialize(json, DTO.class);
}
}
Numbers と Arrays はそのままで問題なく機能しましたが、enum クラスには少し問題がありました。この場合、シリアル化された JSON フォームは、次のものを含む IMO JSON オブジェクトである必要があります。
- タイプメンバー
- バリューメンバー
クラスを見るEnumConverter
と、カスタムを提供する必要があることがわかりますConverter
。ただし、逆シリアルConverter
化中に呼び出されるように を適切に登録する方法がよくわかりません。このシリアル化は、Genson を使用してどのように解決する必要がありますか?