1

Google のgsonライブラリを使用して、POJO を json に解析しています。関連するオブジェクトは次のとおりです。

// Order.java
public class Order {
    // ...
    private int id;
    private String name;
    private Location location;
    // ...
}
// Location.java
public class Location {
    // ...
    private String address;
    private float latitude;
    private float longitude;
    private String postcode
    // ...
}

gson を使用して (Location メンバー変数が null でないことを確認して) 実行すると、次のnew Gson().toJson(order)結果が得られます。

{
    "id" : 1,
    "name" : "nameValue"
}

しかし、私は次のようなものを期待していました:

{
    "id" : 1,
    "name" : "nameValue",
    "location" : {
            "address" : "some address",
            "latitude" : 53.346346,
            "longitude" : -3.346363,
            "postcode" : "23563"
        }
}

なぜこれが起こっているのか分かりません。誰もこれに出くわしましたか?私が間違っている可能性があるのは何ですか?

カスタム Type アダプターを設定しようとしましたが、うまくいきませんでした。

ご協力いただきありがとうございます。

4

1 に答える 1

1

わかりました、私は問題が何であるかを理解しました。次のように、Location 型の匿名コンストラクターを使用してモック オブジェクトを作成するモック オブジェクト ファクトリがありました。

Location location = new Location() {
    {
         setAddress("some address");
         setLatitude(53.346346);
         setLongitude(-3.356363);
         setPostCode("23563");
    }
};

したがって、Gsonはそれを匿名クラスとして解釈し、ドキュメントに記載されているように:

内部クラス、匿名クラス、およびローカル クラスの外部クラスに対応するフィールドは無視され、シリアル化または逆シリアル化に含まれません。

GsonBuilderと iworks を期待どおりに設定する通常の方法に変更しました。ただし、コレクション(ArrayList)でも機能するため、この種の開始を使用できるかどうかは疑問です。これにより、モック ファクトリが読みやすくなります。:)

于 2012-04-27T06:21:06.413 に答える