gpt4 book ai didi

android - WCF 对象数组参数的 JSON 请求

转载 作者:行者123 更新时间:2023-11-29 02:15:22 28 4
gpt4 key购买 nike

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

好的,事情是这样的:

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

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 以这种方式使用此 Web 服务:

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 区域的某处......

最佳答案

找到答案:定义你的类如下:

namespace WebApplication1
{
[KnownType(typeof(Vehicle))]
[DataContract]
public class Vehicle
{
}
}


namespace WebApplication1
{
[CollectionDataContract]
[KnownType(typeof(Vehicle))]
public class clVehicles: List<Vehicle>
{
}
}

关于android - WCF 对象数组参数的 JSON 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4367166/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com