2

mongodb から次のような応答がありましたが、それをデシリアライズする方法が見つかりません。

[{ "_id" : { "$oid" : "some ids"} ,
   "index" : 0 , 
   "question" : "some text ?",
   "optiona" : "OS",
   "optionb" : "JAVA",
   "optionc" : "C",
   "optiond" : "C#",
   "answer" : "JAVA",
   "created_at" : { "$date" : "2012-09-20T06:37:04.306Z" },
   "Active" : "1"
 }, 
 { "_id" : { "$oid" : "505ab997aded66f4c1ccc7f3" }, 
   "index" : 1 ,
   ..../objects like that
}]

より具体的には、 $date 要素と $oid を解析する方法が見つかりません。その要素に対応するデータ メンバーを作成するにはどうすればよいですか、それとも内部クラスを作成する必要がありますか? 非常に基本的な質問のように思えるかもしれませんが、gson parse でそのクラスを使用して解析する方法が見つかりませんでした。ありがとうございます

4

2 に答える 2

0

私は解決策を思いついたと思います、部分的に私はこれからアイデアを得ました、そしてマッピングクラスのために私は_idcreated_atで注釈を使わなければなりませんでした。また、_idとcreated_atごとに静的内部クラスを作成する必要がありました。コードを以下に示します。これは現在機能していますが、より洗練された解決策があると思います。そのため、誰かがより良い解決策を持っている場合は、この質問を開いたままにします。

          import com.google.gson.annotations.SerializedName;
          import java.sql.Date;



         public class QuizDBObject {

/**
 * this class will work as the place holder for the quiz object.
 * An extra variable is added to store answer given by user.
 */
@SerializedName("_id")
 Id _id;



public Id get_id() {
    return _id;
}
public void set_id(Id _id) {
    this._id = _id;
}
@SerializedName("index")

private long index ;
@SerializedName("question")

private String question;
@SerializedName("answer")

private String answer;
@SerializedName("optiona")

private String optiona;
@SerializedName("optionb")

private String optionb;
@SerializedName("optionc")

private String optionc;
@SerializedName("optiond")

private String optiond;
@SerializedName("created_at") 
MyDate created_at;

    public MyDate getCreated_at() {
    return created_at;
}
public void setCreated_at(MyDate created_at) {
    this.created_at = created_at;
}

public void setOptiona(String optiona) {
    this.optiona = optiona;
}
@SerializedName("Active")
private String Active;
/**
 * for storing the answer given by the user for every question.
 */
private String userAnswer;



public String getUserAnswer() {
    return userAnswer;
}
public void setUserAnswer(String userAnswer) {
    this.userAnswer = userAnswer;
}
public QuizDBObject(){
    super();
}

public long getIndex() {
    return index;
}
public void setIndex(long index) {
    this.index = index;
}
public String getQuestion() {
    return question;
}
public void setQuestion(String question) {
    this.question = question;
}
public String getAnswer() {
    return answer;
}
public void setAnswer(String answer) {
    this.answer = answer;
}
public String getOptiona() {
    return optiona;
}
public void setOptionA(String optiona) {
    this.optiona = optiona;
}
public String getOptionb() {
    return optionb;
}
public void setOptionb(String optionb) {
    this.optionb = optionb;
}
public String getOptionc() {
    return optionc;
}
public void setOptionc(String optionc) {
    this.optionc = optionc;
}
public String getOptiond() {
    return optiond;
}
public void setOptiond(String optiond) {
    this.optiond = optiond;
}

public String getActive() {
    return Active;
}
public void setActive(String Active) {
    this.Active = Active;
}
/*public void setCreatedAtString(String type) {
    this.created_at.parse(type);

}
*/

static class Id{
    String $id;

    public String get$id() {
        return $id;
    }

    public void set$id(String $id) {
        this.$id = $id;
    }

}
static class MyDate{
    String $date;

    public String get$date() {
        return $date;
    }

    public void set$date(String $date) {
        this.$date = $date;
    }
}

    }
于 2012-10-29T06:24:27.123 に答える
0

toStringでは、$dateと$oidは人工的なフィールドです。標準のjavamongoドライバーを使用している場合、get( "created_at")はjava.util.Dateインスタンスであり、get( "_ id")はorg.bson.types.ObjectIdインスタンスである必要があります。

私はあなたの質問に少し混乱しているので、代わりに生のBSONオブジェクトを使用している場合、「created_at」はBSON日付型(0x09)になり、そのペイロードはUnixエポックからミリを表す長いものになります。「_id」は、IDに12バイトのペイロードを持つBSON ObjectIdタイプ(0x07)になります。正しく思い出せば、Javaが期待するものとは反対のエンディアンです。詳細については、BSON仕様を参照してください。

于 2012-10-22T19:24:55.723 に答える