将JSON对象发布到WCF服务 - List属性始终为null

时间:2012-12-06 00:47:04

标签: android .net json wcf

我有一个将JSON对象发布到WCF服务的Android应用程序。发布的JSON对象包含数组属性。我的问题是,在服务器上收到arrray属性时始终为null。

这是用于发布的Android代码:

ObjectMapper mapper = new ObjectMapper();
ArrayList<RespuestaEncuesta> respuestas = new ArrayList<RespuestaEncuesta>(1);
RespuestaEncuesta r = new RespuestaEncuesta();
r.Comentarios = "ASD";
r.GrupoClienteID = UUID.fromString("00000000-0000-0000-0000-000000000000");
r.GrupoID = 1155;
r.Opcion = "2";
respuestas.add(r);

RespuestaWrapper data = new RespuestaWrapper();
data.Respuestas = respuestas;

mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
String respuestarJson = mapper.writeValueAsString(data);
String url = config[0] + "/GuardaEncuestas";

HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");

StringEntity tmp = new StringEntity(respuestarJson);
httpPost.setEntity(tmp);

DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.execute(httpPost);

生成以下json:

{
  "RespuestaWrapper" : {
    "Respuestas" : [ {
      "Comentarios" : "ASD",
      "GrupoClienteID" : "00000000-0000-0000-0000-000000000000",
      "Opcion" : "2",
      "Numero" : 0,
      "GrupoID" : 1155.0
    } ]
  }
}

在服务器端,我的服务定义如下:

 [OperationContract]
    [WebInvoke(
            Method = "POST",
            UriTemplate = "GuardaEncuestas",
            BodyStyle = WebMessageBodyStyle.Bare,
            ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json)]
    void GuardaEncuestas(RespuestaWrapper respuestas);

[Serializable, DataContract]
  public class RespuestaWrapper
  {
    [DataMember]
    public List<RespuestasWrapped> Respuestas;
  }

  [Serializable, DataContract]
  public class RespuestasWrapped
  {
    [DataMember(IsRequired = false)]
    public double GrupoID { get; set; }
    [DataMember(IsRequired = false)]
    public Guid GrupoClienteID { get; set; }
    [DataMember(IsRequired = false)]
    public int Numero { get; set; }
    [DataMember(IsRequired = false)]
    public string Opcion { get; set; }
    [DataMember(IsRequired = false)]
    public string Comentarios { get; set; }
  }

每次调用服务时,我都会收到RespuestasWrapped对象,但Respuestas属性为空。

1 个答案:

答案 0 :(得分:2)

您的邮件正文样式BodyStyle = WebMessageBodyStyle.Bare)。如果你生成你的json

{
  "Respuestas" : [ {
    "Comentarios" : "ASD",
    "GrupoClienteID" : "00000000-0000-0000-0000-000000000000",
    "Opcion" : "2",
    "Numero" : 0,
    "GrupoID" : 1155.0
  } ]
}

它会起作用