2017-02-16 21 views
0

要將Java對象與JSON轉換並從JSON轉換,我們使用enum類型的註釋。假設我們有這樣的類型:列表中的枚舉值的持久註釋

public enum MyEnum { 
    HELLO, 
    WORLD 
} 

然後我們以這種方式使用它:

import javax.persistence.EnumType; 
import javax.persistence.Enumerated; 
import java.io.Serializable; 
import java.util.List; 

public class SerializableObject implements Serializable{ 
    @Enumerated(EnumType.STRING) 
    private MyEnum singleValue; 
    // What annotation do I put here? 
    private List<MyEnum> multiValue; 
} 

我的問題是:什麼註釋變爲榜上有名multiValue,使所包含枚舉值正確序列化?

回答

2

您可以使用EnumType.ORDINAL

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

import javax.persistence.EnumType; 
import javax.persistence.Enumerated; 

enum MyEnum { 
    HELLO, WORLD 
} 


public class SerializableObject implements Serializable { 
    @Enumerated(EnumType.STRING) 
    private MyEnum  singleValue; 
    // What annotation do I put here? 
    @Enumerated(EnumType.ORDINAL) 
    private List<MyEnum> multiValue; 


    public void show() { 

     multiValue = new ArrayList<>(Arrays.asList(MyEnum.values())); 
     multiValue.stream().forEach(
       element -> System.out.println(element.ordinal() + " " + element.toString())); 
    } 


    public static void main(String[] args) { 

     new SerializableObject().show(); 
    } 
} 
+0

我也可以使用'EnumType.String'嗎? – hotzst

+0

是的你是對的,最好使用EnumType.String。 /**將枚舉類型的屬性或字段保留爲整數。 */ ORDINAL, /**將枚舉類型的屬性或字段保留爲字符串。 */ STRING 源代碼 – user121290

0

這裏是做系列化和Deserialization.Hope 的fullcode這有助於探索更多。

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

import com.fasterxml.jackson.core.JsonProcessingException; 

enum MyEnum { 
    HELLO, WORLD 
} 



public class SerializableObject implements Serializable { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    @Enumerated(EnumType.ORDINAL) 
    private MyEnum  singleValue; 
    // What annotation do I put here? 
    @Enumerated(EnumType.STRING) 
    private List<MyEnum> multiValue; 


    public void show() { 

     multiValue = new ArrayList<>(Arrays.asList(MyEnum.values())); 
     singleValue=MyEnum.HELLO; 

    } 



    public static void main(String[] args) throws JsonProcessingException { 

     SerializableObject a = new SerializableObject(); 
     a.show(); 
     try { 
      FileOutputStream fileOut = new FileOutputStream("E:\\path\\Crunchify_Test1.txt"); 
      ObjectOutputStream out = new ObjectOutputStream(fileOut); 

      out.writeObject(a); 
      out.close(); 
      fileOut.close(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     try { 
      FileInputStream fileIn = new FileInputStream("E:\\path\\Crunchify_Test1.txt"); 
      ObjectInputStream in = new ObjectInputStream(fileIn); 
      // List<MyEnum> multiValue=(List<MyEnum>) in.readObject(); 
      System.out.println("Deserialized Data: \n" + in.readObject().toString()); 
      in.close(); 
      fileIn.close(); 
     } catch (Exception e) { 
     } 
    } 



    @Override 
    public String toString() { 

     return "SerializableObject [singleValue=" + singleValue + ", multiValue=" + multiValue 
       + "]"; 
    } 



}