在Android中为ASP .NET Web服务构建适当的JSON对象

时间:2015-07-10 23:12:55

标签: android asp.net json

以下用ASP .NET编写的基于REST的Web服务:

public class DeviceInfo {
    public string Model { get; set; }
    public string Serial { get; set; }
}

public class DeviceManagerController : ApiController  {
    ...
    public string Post([FromBody]DeviceInfo info) {
       ...
    }
}

以下是我在Android中构建JSON对象的方法:

    URL url = new URL (url);
    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    urlConn.setDoInput (true);
    urlConn.setDoOutput (true);
    urlConn.setUseCaches (false);
    urlConn.setRequestProperty("Content-Type","application/json");   
    urlConn.connect();

    // Send POST output.
    JSONObject jsonParam = new JSONObject();
    jsonParam.put("Model", "HP");
    jsonParam.put("Serial", "1234");

    DataOutputStream printout = new DataOutputStream(urlConn.getOutputStream ());
    String jsonStr = jsonParam.toString();
    String encodedStr = URLEncoder.encode(jsonStr,"UTF-8");
    printout.writeChars(encodedStr);
    printout.flush ();
    printout.close ();

此代码成功调用Web服务。但是,参数(DeviceInfo)为空。

我甚至尝试直接传递jsonStr而不是先编码。但是,在这种情况下,虽然参数info不再为null,但成员ModelSerial仍然为空。

我想知道是否还有其他错过的东西。问候。

2 个答案:

答案 0 :(得分:0)

使用OutputStreamWriter代替DataOutputStream可以解决问题:

OutputStream os = urlConn.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8");
writer.write(jsonStr);
writer.close();
os.close();

答案 1 :(得分:-1)

这将花费你比你需要更多的时间和精力。使用一些外部json处理库,如Gson或Jackson。创建数据模型类,使用(JsonProperty注释)注释属性并生成适当的json String。 它可能会帮助您使用它们:

http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

When is the @JsonProperty property used and what is it used for?