我的Android客户端试图将JSON类发布到我的wcf服务有问题。 Wcf正在接收帖子,但参数为null
这是android客户端的代码:
private void EnviaDados( DadosUsuario usuario, String fileName, String pAssunto, String pComentario, String pOnde, String pQuando ) throws Exception
{
fileName = fileName.substring( fileName.indexOf("$$$")+3 , fileName.length() );
fileName = fileName.substring( 0, fileName.indexOf("$$$") );
HttpClient httpClient = new DefaultHttpClient();
String url = "http://192.168.1.112/WCF2/UploadService.svc/REST/ArqInfoAndroid";
String pNome = usuario.RetornaDados()[0];
String pDDD = usuario.RetornaDados()[1];
String pTelefone = usuario.RetornaDados()[2];
String pEmail = usuario.RetornaDados()[3];
String pRegiao = usuario.RetornaDados()[4];
try {
URI uri = new URI(url);
HttpPost postRequest = new HttpPost(uri);
StringEntity se = new StringEntity(retornaJson(pNome, pEmail, pDDD,pTelefone, pRegiao, fileName, pComentario, pOnde, pAssunto, pQuando).toString());
postRequest.setEntity(se);
postRequest.setHeader("Accept", "application/json");
postRequest.setHeader("Content-type", "application/json;");
HttpResponse response = httpClient.execute(postRequest);
int staCode = response.getStatusLine().getStatusCode();
if (staCode == 200 || staCode == 400) {
InputStream instream = response.getEntity().getContent();
String res = convertStreamToString(instream);
if(res.contains(("FALHA")))
{
throw new Exception("Falha ao enviar arquivo");
}
}
} catch (UnsupportedEncodingException e) {
} catch (ClientProtocolException e) {
} catch (IOException e) {
} catch (URISyntaxException e){
}
}
public JSONStringer retornaJson(String nome, String email, String ddd, String telefone, String regiao, String arquivo, String comentario, String onde, String assunto, String quando)
{
JSONStringer DadosUsu = new JSONStringer();
try
{
DadosUsu.object()
.key("DadosUsuario").object().key("Nome")
.value(nome).key("Email")
.value(email).key("DDD")
.value(ddd).key("Telefone")
.value(telefone).key("Regiao")
.value(regiao).key("NomeArq")
.value(arquivo).key("Comentario")
.value(comentario).key("Onde")
.value(onde).key("Assunto")
.value(assunto).key("Quando")
.value(quando).endObject().endObject();
}
catch (Exception je)
{
}
return DadosUsu;
}
以下是Wcf 的代码(参数dadosUsuario为null)
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest, UriTemplate = "ArqInfoAndroid")]
public string ArqInfoAndroid(DadosUsu dadosUsuario)
{
EscreverNoLog("Recebendo dados usuário Android");
try
{
string absFileName = string.Format("{0}\\FileUpload\\{1}"
, AppDomain.CurrentDomain.BaseDirectory
, dadosUsuario.NomeArq);
GerenciaThread pTh = new GerenciaThread();
EscreverNoLog("Recebendo dados usuário Android: " +
dadosUsuario.Nome + " - " +
dadosUsuario.Email + " - " +
dadosUsuario.DDD + " - " +
dadosUsuario.Telefone + " - " +
dadosUsuario.Regiao + " - " +
absFileName + " - " +
dadosUsuario.Comentario + " - " +
dadosUsuario.Onde + " - " +
dadosUsuario.Assunto + " - " +
DateTime.ParseExact(dadosUsuario.Quando, "dd/MM/yyyy", null));
pTh.ChamarThread(dadosUsuario.Nome, dadosUsuario.Email, dadosUsuario.DDD, dadosUsuario.Telefone, dadosUsuario.Regiao, absFileName, dadosUsuario.Comentario, dadosUsuario.Onde, dadosUsuario.Assunto, DateTime.ParseExact(dadosUsuario.Quando, "dd/MM/yyyy", null));
return "OK";
}
catch (Exception ex)
{
EscreverNoLog("Erro recebimento dos dados usuário Android");
EscreverNoLog("Mensagem de Erro recebimento dos dados usuário Android: " + ex.Message);
return "FALHA: " + ex.Message;
}
}
public class DadosUsu
{
private string nome;
private string email;
private string ddd;
private string telefone;
private string regiao;
private string nomearq;
private string comentario;
private string onde;
private string assunto;
private string quando;
[DataMember(Name="Nome")]
public string Nome
{
get { return nome; }
set { nome = value; }
}
[DataMember(Name="Email")]
public string Email
{
get { return email; }
set { email = value; }
}
[DataMember(Name="DDD")]
public string DDD
{
get { return ddd; }
set { ddd = value; }
}
[DataMember(Name="Telefone")]
public string Telefone
{
get { return telefone; }
set { telefone = value; }
}
[DataMember(Name="Regiao")]
public string Regiao
{
get { return regiao; }
set { regiao = value; }
}
[DataMember(Name="NomeArq")]
public string NomeArq
{
get { return nomearq; }
set { nomearq = value; }
}
[DataMember(Name="Comentario")]
public String Comentario
{
get { return comentario; }
set { comentario = value; }
}
[DataMember(Name="Onde")]
public string Onde
{
get { return onde; }
set { onde = value; }
}
[DataMember(Name="Assunto")]
public string Assunto
{
get { return assunto; }
set { assunto = value; }
}
[DataMember(Name="Quando")]
public string Quando
{
get { return quando; }
set { quando = value; }
}
}
答案 0 :(得分:1)
您的操作中的参数名称(正文样式为WrappedRequest
)为 dadosUsuario 。在您在Android代码中创建的JSON中,该属性的名称为 DadosUsuario 。这个案例非常重要 - 尝试将其更改为dadosUsuario
(或更改操作中的参数名称以使其第一个字符为大写),它应该可以正常工作。
在不相关的注释上 - 您不需要在Name
属性上指定[DataMember]
属性,因为它们与类的属性具有相同的名称。但这并没有伤害。