2013-05-24 21 views

cevap

18

Gson API documentation göre, GSON böylece temelde serileştirilebilen ve başka tür olduğu gibi, standart toJson ve fromJson yöntemlerle serisi kaldırılan edilmelidir, Enum varsayılan seri hale getirme/deserialization sağlar.

+8

, GSON serializes ve enum yerine sıra değeri adını kullanarak deserializes. Tüm Enum'ları sıra değerlerine göre işlemek için bir seri hale getirici ve serpiştirici oluşturmanın bir yolu var mı? – Churro

+11

Numara için '@ SerializedName 'ek açıklama ekleyebilirsiniz. Benim dizgimin String.valueOf (ordinal) olarak serileştirilmesini sağlayacak – ViliusK

+7

@ViliusK, serileştirilmiş enumumu int türetmek için benzer bir açıklama veya yol var mı? Örneğin. "color": 1 istediğim, "color" değil: "1". – Behnam

130

Bunu deneyebilirsiniz.

import com.google.gson.annotations.SerializedName; 

public enum Color { 

    @SerializedName("0") 
    RED (0), 

    @SerializedName("1") 
    BLUE (1), 

    @SerializedName("2") 
    YELLOW (2); 

    private final int value; 
    public int getValue() { 
     return value; 
    } 

    private Color(int value) { 
     this.value = value; 
    } 

} 
+2

Not: Bu, GSON'un eski sürümleriyle çalışmaz. Sürüm 2.1 ve üstü ile çalışır. –

+5

2.2.4 sürümünü istedi, bu yüzden evet –

+0

Bu gerçekten harika bir yaklaşım. Sık sık kullandım ve GSON'un daha yeni sürümlerinde, kullanıcıların bu yaklaşımı kullanmaya eğilimli olmaları gerek çünkü özlü ve karmaşık özel serileştirme/serileştirme kodu gerektirmiyor. – jwir3

1

olsa GSON hangi sürümünü gelen bu ince, hem de bilmiyorum işleri: varsayılan olarak

public enum OrderLineTimeRegistrationStatus { 
    None(0), Started(1), Paused(2); 

    private int value; 

    private OrderLineTimeRegistrationStatus(int value) 
    { 
     this.value=value; 
    } 

    public int getValue() 
    { 
     return(value); 
    } 
} 
+2

Korkarım ki çalışmıyor. Gson 2.8.0'ı kullanma. Nasıl olsa işe yarayabilir? Gson akıllı, ama o kadar akıllı değil. – waste

İlgili konular