2016-02-18 3 views
0

У меня есть член класса с типом bson.ObjectId.bson.ObjectId сериализация с gson

После сериализации gson по умолчанию использует метод toString(), и возвращаемое значение не является тем, что я хочу. Я хотел бы сериализовать ObjectId, используя метод toHexString(), вместо этого я мог бы получить ObjectId в формате HexString.

Как сделать gson сериализовать ObjectId в формате HexString?

спасибо.

ответ

4

Я решил проблему. В настоящее время у меня есть такой класс, чтобы получить объект Gson, и он хорошо работает для меня.

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import com.google.gson.JsonDeserializationContext; 
import com.google.gson.JsonDeserializer; 
import com.google.gson.JsonElement; 
import com.google.gson.JsonParseException; 
import com.google.gson.JsonPrimitive; 
import com.google.gson.JsonSerializationContext; 
import com.google.gson.JsonSerializer; 

import org.bson.types.ObjectId; 

import java.lang.reflect.Type; 

public class GsonUtils { 

    private static final GsonBuilder gsonBuilder = new GsonBuilder() 
      .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") 
      .registerTypeAdapter(ObjectId.class, new JsonSerializer<ObjectId>() { 
       @Override 
       public JsonElement serialize(ObjectId src, Type typeOfSrc, JsonSerializationContext context) { 
        return new JsonPrimitive(src.toHexString()); 
       } 
      }) 
      .registerTypeAdapter(ObjectId.class, new JsonDeserializer<ObjectId>() { 
       @Override 
       public ObjectId deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { 
        return new ObjectId(json.getAsString()); 
       } 
      }); 

    public static Gson getGson() { 
     return gsonBuilder.create(); 
    } 
} 

Надеюсь, это поможет.

Ссылка: http://max.disposia.org/notes/java-mongodb-id-embedded-document.html

Btw, Кода не работает и имеет некоторые незначительные иные ошибки. Я исправил эту проблему в моей.

Смежные вопросы