Comment puis-je faire un Volley JSONObject Demande avec un objet personnalisé comme un paramètre?

Je suis en train de faire un JSONObject requête POST à l'aide du Volley de la bibliothèque à un serveur qui prend 2 paramètres, un objet (Adresse) et une liste de différents objets (les Locataires).

Lorsque je tente de faire la demande, le premier paramètre (Adresse) est mis en forme par de Volley avant de l'envoyer et la demande n'est pas acceptée par le serveur.

Ma requête ressemble à quelque chose comme ceci:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, SERVER_URL,
    postPropertyJSONObject, responseListener, errorListener)

Mon postPropertyJSONObject est créé comme ceci:

JSONObject obj = new JSONObject();
obj.put("Address", convertAddressToJson(property.getAddress()).toString());
obj.put("Tenants", prop.getTenantList());

La convertAddressToJson() la méthode ressemble à ceci:

JSONObject jsonObject= new JSONObject();
jsonObject.put("Building", address.getBuilding());
jsonObject.put("Street", address.getStreet());
jsonObject.put("Town", address.getTown());
jsonObject.put("ZipCode", address.getZipCode());
jsonObject.put("County", address.getCounty());
jsonObject.put("Country", address.getCountry());

J'ai essayé simplement de passage à l'Adresse de l'objet, mais ce n'était pas sérialisé à tous de sorte qu'il ne fonctionne pas non plus. J'ai aussi essayé de passage de l'Adresse.toString() dans le champ "Adresse" de la JSONObject utilisée dans la demande, mais qui ne fonctionne pas non plus.

La getAddress() la méthode de mon objet de Propriété renvoie un objet d'Adresse qui ressemble à quelque chose comme ceci:

public class Address {

    private String Street;
    private String Building;
    private String Town;
    private String ZipCode;
    private String County;
    private String Country;
    //getters and setters
}

Lorsque je me connecte à l'adresse avant de me passer la la demande, il ressemble à ceci:

{"Town":"MyTown","Street":"MyStreet","County":"MyCounty","Country":"MyCountry",
 "ZipCode":"MyZipCode","Building":"MyBuilding"}

Mais quand les Journaux du serveur ce qu'il a reçu, il ressemble à ceci:

{\"Town\":\"MyTown\",\"Street\":\"MyStreet\",\"County\":\"MyCounty\",
 \"Country\":\"MyCountry\",\"ZipCode\":\"MyZipCode\",\"Building\":\"MyBuilding\"}"

Cette mise en forme appliquée par Volley semble être modifier la valeur que je passe avec ma demande si quelqu'un peut me dire si il ya une meilleure façon d'aborder cette tâche qui devrait être relativement simple? J'ai fait des demandes pour le même serveur à l'aide de Cordes et de valeurs de type Entier, mais j'ai eu ce problème tout en essayant de faire passer une classe personnalisée en tant que paramètre.

MODIFIER

À l'aide de wbelarmino du conseil, je suis passé à l'aide d'une table de hachage pour stocker mon objet personnalisé et créé un JSONObject:

HashMap<String, Address> params = new HashMap<String, Address>();
params.put("Address", prop.getAddress());
requestObject = new JSONObject(params);

OriginalL'auteur Aido | 2014-07-21