C# 将Android类发送到WCF Web服务

C# 将Android类发送到WCF Web服务,c#,android,.net,wcf,rest,C#,Android,.net,Wcf,Rest,我正在尝试使用REST发送到一个公开的Web服务。但我得到的是400(糟糕的要求) 如何从REST发送一个模型,该模型将正确映射到另一侧的模型。我不想做的是在连接点中单独公开所有100个参数 [OperationContract] [WebInvoke( Method = "POST", UriTemplate = "SaveData", BodyStyle = WebMessageBodyStyle.WrappedRequest,

我正在尝试使用REST发送到一个公开的Web服务。但我得到的是400(糟糕的要求)

如何从REST发送一个模型,该模型将正确映射到另一侧的模型。我不想做的是在连接点中单独公开所有100个参数

    [OperationContract]
    [WebInvoke(
        Method = "POST",
        UriTemplate = "SaveData",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json)]
    void SaveData(datum data);
但我不能做的是传递一个有效的基准对象

     // Build JSON string
     JSONStringer vehicle;
    try {
        vehicle = new JSONStringer()
             .object()
                 .key("datum")
                     .object()
                         .key("ID").value(5)
                         .key("Name").value("test")
                         .key("No").value(54)
                         .key("Description").value("Test")
                     .endObject()
                 .endObject(); 

      HttpPost request = new HttpPost(address + "/SaveData");
     Log.d("WebInvoke", "Connection : " + address + "/SaveData");
     request.setHeader("Accept", "application/json");
     request.setHeader("Content-type", "application/json");
         StringEntity entity = new StringEntity(vehicle.toString());
         Log.d("StringEntity", vehicle.toString());
         request.setEntity(entity);

         // Send request to WCF service
         DefaultHttpClient httpClient = new DefaultHttpClient();
         HttpResponse response = httpClient.execute(request);

         Log.d("WebInvoke", "Saving : " +    response.getStatusLine().getStatusCode());
             // Saving : 400
基准等级:

[DataContract]
public partial class datum
{
    [DataMember(Name = "ID")]
    public int ID { get; set; }
       [DataMember(Name = "Name")]
    public string Name { get; set; }
     [DataMember(Name = "No")]
    public Nullable<int> No { get; set; }

        [DataMember(Name = "Description")]
    public string Description { get; set; }
}
[DataContract]
公共部分类数据
{
[数据成员(Name=“ID”)]
公共int ID{get;set;}
[数据成员(Name=“Name”)]
公共字符串名称{get;set;}
[数据成员(Name=“No”)]
公共可为空的No{get;set;}
[DataMember(Name=“Description”)]
公共字符串说明{get;set;}
}
它应该是:

vehicle = new JSONStringer()
             .object()
                 .key("data")
                     .object()
                         .key("ID").value(5)
                         .key("Name").value("test")
                         .key("No").value(54)
                         .key("Description").value("Test")
                     .endObject()
                 .endObject(); 
资料来源:

你得到了什么json?你在另一边期待什么json?@OskarKjellin
{“datum”:{“ID”:5,“Name”:“test”,“No”:54,“Description”:“test”}}
我觉得这很正确。类
datum
int
String
int
String
。不确定它应该如何映射,也不确定如何查看服务器接收到的内容。请尝试不将其包含在数据中key@OskarKjellin
{“ID”:5,“Name”:“test”,“No”:54,“Description”:“test”}
仍然给出400。谢谢,我现在有了
{“data”:{“ID”:5,“Name”:“test”,“No”:54,“Description”:“test”}
但是仍然得到400错误:(添加到问题。和+1用于所有帮助您是否从服务器获得任何响应正文?只是错误的请求:400。我无法从浏览器运行它,因为不允许使用方法(Post方法),我不知道如何在fiddler2中构建它,也不知道它如何拦截来自android的调用。因此,我对主体不确定。我将其更改为返回一个int。我可以尝试在android上获得它。嘿,我实际上只是将
return data.ID+data.Name+data.Description+data.no;
放在方法的顶部,并将返回类型更改为stringandroid接收到
“5Test54”
,所以这是我方法中的一部分。我可以自己调查一下。你已经回答了我关于将模型映射到WCF的问题。谢谢!