オブジェクトのリストを返すWCFサービスを利用しようとするAndroidアプリがあります。ストリームは正しく読み取られますが、文字列をJSONArrayに変換しようとすると、空のJSONExceptionがスローされます。JSONバリデーターでJSON応答を確認しましたが、この継ぎ目は問題ありません。
私のWCFサービス契約:
[ServiceContract]
public interface IAndroidWebService
{
[OperationContract]
[WebGet(UriTemplate = "AndroidGetTenants",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json)]
List<TenantEntity> AndroidGetTenants();
}
呼び出されたときに生成されるJSON応答:
[{"MaxVotesPerSecond":0,"Name":"Duurzaam OV","PartitionKey":"a63569b9-e794-4674-832b-46e85de0dc0a","RowKey":"02f1654c-9746-4da5-a146-bff7fe611468"},
{"MaxVotesPerSecond":0,"Name":"Overheid","PartitionKey":"e38f3d93-5b4d-41e9-8513-3fd350a019af","RowKey":"11ec2c3e-e65f-45cf-9c89-4aa40a2c21c7"}]
私のアプリで使用されているJavaコード:
HttpGet request = new HttpGet("http://XX.XX/WebService.svc/Android/AndroidGetTenants");
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
HttpEntity responseEntity = response.getEntity();
byte[] buffer = new byte[(int)responseEntity.getContentLength()];
InputStream stream = responseEntity.getContent();
stream.read(buffer);
stream.close();
String tekst = new String(buffer,"UTF-8");
JSONArray tenants = new JSONArray(tekst);
Javaコードは空のJSONExceptionをスローします(catchのパラメーターeは存在しません)。サービスはオブジェクトの配列を返すようです。私が変更したとき:
JSONArray tenants = new JSONArray(tekst);
と
JSONObject tenants = new JSONObject(tekst);
コードはJSONException: Value [{"RowKey":"02f1654c-9746-4da5 ...... esPerSecond":0}] of type org.json.JSONArray cannot be converted to JSONObject
これはJSONArrayを使用することを示していますが、これも上記の空の例外をスローします。
誰かが助けてくれることを願っています。
追加情報:このコードも同じ例外をスローします:
String tekst = "[\"1\",\"2\"]";
JSONArray tenants = new JSONArray(tekst);
これは単純なJSON配列であり、なぜこれが機能しないのか本当にわかりません。