javafx使用颜色序列化包装器

javafx使用颜色序列化包装器,javafx,serialization,colors,deserialization,wrapper,Javafx,Serialization,Colors,Deserialization,Wrapper,编辑: 我正在尝试使用以下数据字段序列化类: private int radius; private int strokeWidth; private String colorName; private CannonBallDrawModeEnum cannonBallDrawModeEnum; 有一些方法可以将colorName转换为Color。在序列化之前,我调用一个方法将colorName转换回String,以确保没有问题。序列化后,我注意到文本文件中的标

编辑: 我正在尝试使用以下数据字段序列化类:

    private int radius;
    private int strokeWidth;
    private String colorName;
    private CannonBallDrawModeEnum cannonBallDrawModeEnum;
有一些方法可以将
colorName
转换为
Color
。在序列化之前,我调用一个方法将
colorName
转换回
String
,以确保没有问题。序列化后,我注意到文本文件中的标记
。当我移除标记时,我可以毫无问题地反序列化类。如何阻止此标记被序列化

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<serializeWrapper>
    <cannonBallData>
        <cannonBallDrawModeEnum>CIRCLE</cannonBallDrawModeEnum>
        </color>                     //<--------------This line does not belong.
        <colorName>RED</colorName>
        <radius>40</radius>
        <strokeWidth>1</strokeWidth>
    </cannonBallData>
    <pyramidData>
        <height>4</height>
        <name>MyPyramid_1</name>
        <stackingOrder>LeftJustified</stackingOrder>
    </pyramidData>
</serializeWrapper>

圆圈

// 因为您使用的是JAXB,所以应该使用
XmlAdapter
颜色映射到
字符串中,反之亦然。下面是一个例子:

Main.java:

导入java.io.File;
导入javafx.scene.paint.Color;
导入javax.xml.bind.JAXB;
公共班机{
公共静态void main(字符串[]args){
File File=新文件(“entity.xml”).getAbsoluteFile();
System.out.println(“XML文件:”+文件);
实体=新实体();
实体。设置半径(24);
实体。设置行程宽度(2);
entity.setColor(Color.RED);
System.out.println(“封送前:+实体”);
marshal(实体、文件);
System.out.println(“UNMARSHAL之后:+JAXB.UNMARSHAL(file,Entity.class));
}
}
Entity.java:

导入javafx.scene.paint.Color;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
导入javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
公共类实体{
私人色彩;
私有整数半径;
私有内冲程宽度;
@XmlElement
@XmlJavaTypeAdapter(ColorXmlAdapter.class)//应用适配器
公共颜色getColor(){
返回颜色;
}
公共空间设置颜色(颜色){
这个颜色=颜色;
}
@XmlElement
公共int getRadius(){
返回半径;
}
公共空间设置半径(整数半径){
这个半径=半径;
}
@XmlElement
public int getStrokeWidth(){
返回行程宽度;
}
公共无效设置行程宽度(int行程宽度){
this.strokeWidth=strokeWidth;
}
@凌驾
公共字符串toString(){
返回“实体{radius=“+radius+”,strokeWidth=“+strokeWidth+”,color=“+color+”}”;
}
}
ColorXmlAdapter.java:

导入javafx.scene.paint.Color;
导入javax.xml.bind.annotation.adapters.XmlAdapter;
公共类ColorXmlAdapter扩展了XmlAdapter{
@凌驾
公共颜色解组器(字符串v)引发异常{
返回Color.valueOf(v);//能够解析十六进制颜色字符串
}
@凌驾
公共字符串封送处理(颜色v)引发异常{

int red=toInt(v.getRed())您是在使用JAXB还是在使用Java序列化?
JAXB.marshal
JAXB.unmarhsal
。我使用的这本书没有区分这一点,所以我不确定。您可以创建并提供一个示例来演示这个问题吗?@Slaw看起来在序列化上添加了另一个颜色标记,但我不确定是什么像这样的ng应该来自。你的包装类,你正在使用的书是建议它还是你的想法?我希望前者会建议一个适配器,因为你正在使用JAXB。谢谢。作为参考,你知道我的原始示例为什么会产生
标记吗?我不知道,抱歉。我对JAXB不够熟悉,无法推断cau是什么问题输出的se可能是。