首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WCF对象数组参数的JSON请求

WCF对象数组参数的JSON请求
EN

Stack Overflow用户
提问于 2010-12-06 22:05:26
回答 1查看 3.6K关注 0票数 2

我在网上搜索了两天的答案后问了这个问题。

好吧,事情是这样的:

在服务器端,我有一个WCF WCF服务,定义如下:

代码语言:javascript
运行
复制
namespace HelloRest
{
[System.ServiceModel.ServiceContract]
public interface IHelloRest
  {
    [OperationContract]
    [WebInvoke(
        Method = "POST",
        UriTemplate = "SaveVehicle",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json)]
    string SaveVehicle(clVehicles vehicles);
  }
}

namespace HelloRest
{
  public class HelloRestService : IHelloRest
{
   public string SaveVehicle(clVehicles vehicles)
    {
    ...
    }
}
}


namespace WebApplication1
{

    [Serializable]
    [DataContract]
    public class clVehicles
    {
        [DataMember]
        public List<Vehicle> Vehicles { get; set; }
    }
}


namespace WebApplication1
{

    [Serializable]
    [DataContract]
    public class Vehicle
    {

        [DataMember(Name = "year")]
        public int Year
        {
            get;
            set;
        }

        [DataMember(Name = "plate")]
        public string Plate
        {
            get;
            set;
        }

        [DataMember(Name = "make")]
        public string Make
        {
            get;
            set;
        }

        [DataMember(Name = "model")]
        public string Model
        {
            get;
            set;
        }
    }    
}

我试着用Android来使用这个way服务,这样:

代码语言:javascript
运行
复制
HttpPost request = new HttpPost(Consts.URL + "/SaveVehicle");
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");

JSONStringer v = new JSONStringer();
v.object();
v.key("Vehicles");
v.object();
v.key("plate").value(plate);
v.key("make").value(make);
v.key("model").value(model);
v.key("year").value(Integer.parseInt(year.toString()));
v.endObject();
v.endObject();
JSONArray arr = new JSONArray();
arr.put(v);

JSONStringer vehicle = new JSONStringer();
vehicle.object();
vehicle.key("vehicles").value(arr);
vehicle.endObject();

StringEntity entity = new StringEntity(vehicle.toString());
request.setEntity(entity);
// Send request to WCF service
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);

问题是:

当我启动客户端时,请求被正确地转发到服务器(我在"SaveVehicle“函数中有一个断点)。

问题出在函数的参数:"vehicles“-这个对象(假设)只包含一个成员-- "Vehicles",它的类型是: List。无论我从客户端发送什么,我都会得到这个内部容器("Vehicles")的空值。

我几乎什么都试过了!我确信问题出在JSONStringer区域的某个地方...

EN

Stack Overflow用户

回答已采纳

发布于 2010-12-09 15:52:59

找到了答案:如下定义您的类:

代码语言:javascript
运行
复制
namespace WebApplication1
{
 [KnownType(typeof(Vehicle))]
 [DataContract]
 public class Vehicle
 {
 }
}


namespace WebApplication1
{
 [CollectionDataContract]
 [KnownType(typeof(Vehicle))]
 public class clVehicles: List<Vehicle>
 {      
 }
}
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4367166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档