Android 具有 ASP.NET WebAPI 服务器的应用程序 - 发送复杂类型

Android App with ASP.NET WebAPi Server - send complex types

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

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

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

class Author {
    string name;
    int    age;
}

我应该如何使用请求参数将一本书(包括作者)传递到我的服务器(假设服务器上的数据 class 看起来相同)?

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

谢谢

  1. 首先,您需要在 android 项目中声明书籍和作者 (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 这样的库来 post 你对服务器的请求:

    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
    }
    

编辑:对于通过 AsyncHttpClient posting JSON 使用此:

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