使用ASP.NET WebAPi Server的Android应用程序 - 发送复杂类型

时间:2015-09-29 20:07:11

标签: android json rest asp.net-web-api http-request-parameters

我有一个Android应用程序,它通过与我的ASP.NET WebApi服务器连接的Web服务。对于发送请求,我使用AsyncHttpClient并将参数传递给服务器我使用RequestParams。现在我想向我的服务器发送一个包含带有其他复杂对象的列表的复杂对象,并且存在问题。我该怎么做?对于简单类型,它非常简单,因为我只需要在同一个参数名称上多次调用parameter.add("paramname", paramvalue);,在服务器端我会收到一个列表。但是当我的列表具有复杂类型时,调用应该是什么样的,以便我在包含这些复杂类型的服务器上收到一个列表?

假设我有一本包含作者列表的书:

class Book {
   string title;
   int year;
   List<Authors> authors;
}

class Author {
    string name;
    int    age;
}

我应该如何使用Request params将书籍(包括作者)传递到我的服务器(让我们假设服务器上的数据类看起来一样)?

我差点忘了服务器接受JSON作为格式。

谢谢

1 个答案:

答案 0 :(得分:1)

  1. 首先,您需要在Android项目中声明Book and Author(POJO)。
  2. 然后你需要将你的复杂对象转换为json对象(你可以手动或使用GSON Libary)

    Gson gson = new Gson();
    String jsonString = gson.toJson(myBook);
    JSONObject bookJsonObj = new JSONObject();
    
    try {
        bookJsonObj = new JSONObject(jsonString);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    
  3. 然后您可以使用Google Volley这样的库将您的请求发布到服务器:

    JsonObjectRequest myJsonRequest = new JsonObjectRequest(Request.Method.POST,
                    ACTION_METHOD_URL, bookJsonObj , new Response.Listener<JSONObject>() {
    
        @Override
        public void onResponse(JSONObject jObj) {
    
        }
    }, new Response.ErrorListener() {
    
        @Override
        public void onErrorResponse(VolleyError error) {
    
        }
    });
    volleySingleton.addToRequestQueue(myJsonRequest, MY_REQUEST_TAG);
    
  4. 最后在api控制器中为请求添加Action方法

    public IHttpActionResult YourActionMethod(Book book)    
    {
        // do your request action here
    }
    
  5. 编辑:通过AsyncHttpClient发布JSON,请使用:

        StringEntity entity = new StringEntity(bookJsonObj.toString());
        client.post(context, ACTION_METHOD_URL, entity, "application/json",
                responseHandler)