我知道关于这个问题有很多问题,也有很多答案,但是我还没有找到这个问题的解决方案,不知道是否有人有一些想法。
请注意,我是Android的新手,不幸地从一个不再与我们在一起的Android开发人员那里继承了这个项目。
这是我正在处理的。我有一个Android应用程序,调用一个web服务,并得到一个响应流。
我试过使用String ScanString = new Scanner(inStream).useDelimiter("\A").next();
似乎可以工作并产生如下字符串
{"RegResponseResult":"{u000du000a "REGISTERED": true,u000du000a "COMPANY_URL": "http://111.222.3.444/ABC/XYZ.svc/"u000du000a}"}
我的问题是.....当我尝试使用JSONObject JSONObj = new JSONObject(ScanString)
将字符串转换为JSONObject时,结果对象只有一个名称evaluepair .
即:key=RegResponseResult
和value={ "REGISTERED": true, rn"COMPANY_URL": "http://111.222.3.444/ABC/XYZ.svc/"rn}
} "
如何喷气一个JsonObject,忽略' responseresult ',并使用包含标签代替,使它最终看起来像这样。
ie: JSONObj =
Key=REGESTERD value=true
Key=COMPANY_URL value=http://111.222.3.444/ABC/XYZ.svc
"RegResponseResult"
是字符串,所以你可能不得不再次重新解析它以获得内部json对象。
String innerJson = JSONObj.getString("RegResponseResult");
JSONObject inner = new JSONObject(innerJson);
谢谢你的建议。
我最终改变了我的webservice,输出一个流而不是字符串。
原来WCF添加了一堆到字符串,这使它作为Json字符串无效。
但是将其作为流返回,不会导致添加任何内容。这是webservice的流构建器代码…如果有人需要的话。
//When Reading the DB in the Iaaa.csv
public Stream RegResponse(String DeviceData)
{
// *****connect to db and call stored proc goes here****
// .................
// read parameters back from cmd object.
DeviceRegisterResponse Response = new DeviceRegisterResponse();
Response.REGISTERED = Convert.ToBoolean(cmd.Parameters["REGISTERED"].Value);
Response.COMPANY_URL = Convert.ToString(cmd.Parameters["COMPANY_URL"].Value);
return GenerateStreamFromString(JsonConvert.SerializeObject(Response, Formatting.None));
}
//When passsing it back from the service in the Iaaa.cs
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "REG/{id}")]
Stream RegResponse(string id);