Java 有效Json上的凌空JSONArray分析错误
我试图从一个c#web api解析这个JsonString:Java 有效Json上的凌空JSONArray分析错误,java,c#,json,asp.net-web-api2,android-volley,Java,C#,Json,Asp.net Web Api2,Android Volley,我试图从一个c#web api解析这个JsonString: [{ "LimiteCredito": 123.00, "PessoasFuncionarioId": 16, "Id": 12, "Nome": "Cliente PF A", "DataEdicao": "\/Date(1485019536610-0200)\/", "UsuarioAlteracaoId": "cdf23118-5991-4eb5-9ec4-ea1fc6e6ce3a", "RazaoSocial": "Clien
[{
"LimiteCredito": 123.00,
"PessoasFuncionarioId": 16,
"Id": 12,
"Nome": "Cliente PF A",
"DataEdicao": "\/Date(1485019536610-0200)\/",
"UsuarioAlteracaoId": "cdf23118-5991-4eb5-9ec4-ea1fc6e6ce3a",
"RazaoSocial": "Cliente PF A",
"Tipo": 1,
"Cpf": "80158536991 ",
"Sexo": "M",
"TelefonePrincipal": "(41) 9999-9999",
"Email": "comercial@datasig.com.br",
"EstadoRgId": 2,
"Apelido": "Cliente PF A",
"Erp10Id": 1,
"GrupoCrCpId": 1
}, {
"LimiteCredito": 100.00,
"PessoasFuncionarioId": 13,
"Id": 15,
"Nome": "cliente teste 3",
"DataEdicao": "\/Date(1484849276613-0200)\/",
"UsuarioAlteracaoId": "cdf23118-5991-4eb5-9ec4-ea1fc6e6ce3a",
"RazaoSocial": "cliente teste 3",
"Tipo": 2,
"Cnpj": "20720218000128 ",
"InscricaoEstadual": "ISENTO",
"TelefonePrincipal": "(0",
"Email": "cliente3@email.com.br",
"Apelido": "cliente teste 3",
"InscricaoMunicipal": "ISENTO",
"Erp10Id": 1,
"GrupoCrCpId": 1
}, {
"LimiteCredito": 3.00,
"Id": 43,
"Nome": "asadvadv",
"DataEdicao": "\/Date(1487379145870-0200)\/",
"UsuarioAlteracaoId": "cdf23118-5991-4eb5-9ec4-ea1fc6e6ce3a",
"RazaoSocial": "asadvadv",
"Tipo": 1,
"Cpf": "01234567890 ",
"Rg": "2.231.232",
"Sexo": "M",
"TelefonePrincipal": "(34) 11313-1313",
"TelefoneSecundario": "(13) 13434-1341",
"Email": "341341341dfdf",
"Observacao": "wdgwrg",
"Inativa": true,
"EstadoRgId": 1,
"Apelido": "tes te",
"Erp10Id": 1
}]
这段代码抛出了一个兼容性错误:“那不是JSONArray”
公共类RegrasClienteMixForteHelper扩展请求{
私人反应。听者反应;
私有映射参数;
public RegrasClienteMixForteHelper(int方法、字符串url、映射参数、Response.Listener响应、Response.ErrorListener侦听器){
super(方法、url、侦听器);
this.params=params;
这个。反应=反应;
}
公共映射getParams()引发AuthFailureError{
返回参数;
}
公共映射getHeaders()引发AuthFailureError{
HashMap头=新的HashMap();
header.put(“apiKey”、“application/json”);
返回(标题);
}
@凌驾
受保护的响应parseNetworkResponse(NetworkResponse响应){
试一试{
String jsonString=新字符串(response.data,HttpHeaderParser.parseCharset(response.headers));
JSONArray JSONArray=新JSONArray(jsonString);//错误->这不是JSONArray,与JSONObject相同
返回Response.success(jsonArray,HttpHeaderParser.parseCacheHeaders(Response));
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void deliverResponse(JSONArray响应){
this.response.onResponse(response);
}
}
该代码是从我的活动类调用的:
public class TesteRequisicaoActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_teste_requisicao);
url = "myUrl";
queue = Volley.newRequestQueue(TesteRequisicaoActivity.this);
callByJsonArrayRequest(null);
}
// CALLS VOLLEY
public void callByJsonArrayRequest(View view) {
Map<String, String> params = new HashMap<String, String>();
params.put("UserName", "userDemo");
params.put("Password", "12345678");
RegrasClienteMixForteHelper request = new RegrasClienteMixForteHelper(Request.Method.POST, url, params, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.i("Script", "SUCCESS: " + response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(TesteRequisicaoActivity.this, "Error: " + error.getMessage(), Toast.LENGTH_LONG).show();
}
});
request.setTag("tag");
queue.add(request);
}
@Override
public void onStop() {
super.onStop();
queue.cancelAll("tag");
}
公共类TesteRequisitiCaoActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u teste\u requisicao);
url=“myUrl”;
queue=Volley.newRequestQueue(testeRequestsCaoActivity.this);
callByJsonArrayRequest(null);
}
//射门
public void callByJsonArrayRequest(视图){
Map params=新的HashMap();
参数put(“用户名”、“用户演示”);
参数put(“密码”,“12345678”);
RegrasClienteMixForteHelper request=新的RegrasClienteMixForteHelper(request.Method.POST,url,params,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
Log.i(“脚本”,“成功:+响应”);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(testeRequisiticaoActivity.this,“错误:+Error.getMessage(),Toast.LENGTH\u LONG.show();
}
});
请求。设置标签(“标签”);
添加(请求);
}
@凌驾
公共void onStop(){
super.onStop();
queue.cancelAll(“标记”);
}
我试着用new Gson.parse(string).getAsJsonArray()
解析,同样的错误,用new JSONObject(string)
解析,同样的错误,我不知道现在该怎么办
有人能解释我应该做什么以及为什么会发生这种情况吗?因为响应是有效的Json
更多信息:
- web api的响应编码是默认的(我没有更改)
- json没有换行符和制表符
\n\t
DateTime
序列化处理之后,我使用以下方式进行序列化:
private string Json(object anything)
{
return JsonConvert.SerializeObject(anything, Formatting.None, new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
ConstructorHandling = ConstructorHandling.Default,
DateFormatHandling = DateFormatHandling.IsoDateFormat,//Before : MicrosoftDateFormat
DefaultValueHandling = DefaultValueHandling.Ignore,
NullValueHandling = NullValueHandling.Ignore,
ObjectCreationHandling = ObjectCreationHandling.Replace,
PreserveReferencesHandling = PreserveReferencesHandling.None,
CheckAdditionalContent = false
});
}
我使用此方法格式化HTTP响应:
private HttpResponseMessage Response(object response)
{
return new HttpResponseMessage()
{
Content = new StringContent(
Json(response),
System.Text.Encoding.UTF8,
"application/json"
)
};
}
在api控制器中执行的所有操作如下所示:
[HttpPost]
[Route("Clientes")]
public HttpResponseMessage GetClientes([FromBody]WebAuthModel model)
{
SetUser(model);
return Response(db.MyEntities.ToList().Select(x => GenericCreator.GetModel(x)));
}
这将为volley框架生成一个可解析的Json
[HttpPost]
[Route("Clientes")]
public HttpResponseMessage GetClientes([FromBody]WebAuthModel model)
{
SetUser(model);
return Response(db.MyEntities.ToList().Select(x => GenericCreator.GetModel(x)));
}