我如何使用Jackson将javafx.scene.paint.Color转换为JSON和从JSON转换

时间:2015-05-05 20:24:41

标签: jackson javafx-8

我试图找到一个例子,但无法解释如何将javafx.scene.paint.Color JSON重新组合成POJO。

当我创建JSON时,Color.RED变为:

{
  "annotationText" : "5/5/2015 12:18 PM",
  "pageNumber" : 0,
  "textColor" : {
  "red" : 1.0,
  "green" : 0.0,
  "blue" : 0.0,
  "opacity" : 1.0,
  "opaque" : true,
  "brightness" : 1.0,
  "hue" : 0.0,
  "saturation" : 1.0
  },
"fillColor" : null
}

我不知道如何解析它,以便它将Color.RED放回我的POJO上的textColor字段。

任何指针都会受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

基于上面的评论 - 我能够让它像这样工作:

public class AnnotationDeserializer extends JsonDeserializer<AnnotationDetail>{

    @Override
    public AnnotationDetail deserialize(JsonParser jp, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException {
        AnnotationDetail detail = new AnnotationDetail();

        JsonNode node = jp.getCodec().readTree(jp);

        detail.setAnnotationText(node.get("annotationText").asText());
        detail.setPageNumber((Integer) ((IntNode) node.get("pageNumber")).numberValue());

        JsonNode textColorNode = node.get("textColor");
        double red =(Double) ((DoubleNode) textColorNode.get("red")).numberValue();
        double green = (Double) ((DoubleNode) textColorNode.get("green")).numberValue();
        double blue = (Double) ((DoubleNode) textColorNode.get("blue")).numberValue();
        double opacity = (Double) ((DoubleNode) textColorNode.get("opacity")).numberValue();

        detail.setTextColor(new Color(red, green, blue, opacity));
        return detail;
    }
}