Tôi muốn làm cho gson có thể trả về đối tượng EnumMap
. Tôi sử dụng đoạn mã sauGSON từJson trả về LinkedHashMap thay vì EnumMap
package sandbox;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.EnumMap;
import java.util.Map;
/**
*
* @author yccheok
*/
public class Sandbox {
public static void main(String[] args) throws InterruptedException {
testGson();
}
public static enum Country {
Malaysia,
UnitedStates
}
public static void testGson() {
Map<Country, String> enumMap = new EnumMap<Country, String>(Country.class);
enumMap.put(Country.Malaysia, "RM");
enumMap.put(Country.UnitedStates, "USD");
Gson gson = new Gson();
String string = gson.toJson(enumMap);
System.out.println("toJSon : " + string);
enumMap = gson.fromJson(string, new TypeToken<EnumMap<Country, String>>(){}.getType());
System.out.println("fromJSon : " + enumMap);
System.out.println("fromJSon : " + enumMap.getClass());
}
}
Tuy nhiên, tôi nhận được sau
toJSon : {"Malaysia":"RM","UnitedStates":"USD"}
fromJSon : {Malaysia=RM, UnitedStates=USD}
fromJSon : class java.util.LinkedHashMap
mặc dù tôi đã sử dụng new TypeToken<EnumMap<Country, String>>(){}.getType()
để cụ thể tôi muốn EnumMap
thay vì LinkedHashMap
Làm thế nào tôi có thể làm gson để trả lại EnumMap
?
là kinda lạ, tôi sử dụng mã của bạn một cách chính xác, nhưng tôi nhận được LinkedHashMap vẫn ở cạnh tôi. Tôi đang sử dụng gson-2.1. Nó có quan trọng không? –
Xin lỗi. Sử dụng gson 2.2.3 mới nhất hoạt động hoàn hảo. –
@CheokYanCheng Sử dụng GSON 2.2.3 nó có hoạt động cho bạn ra khỏi hộp mà không có bất kỳ thay đổi mã nào không? –