Я задаю этот вопрос после поиска в Интернете ответа в течение 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 следующим образом:
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» - этот объект (предположительно) содержит только один член -«Транспорт», который относится к типу: Список.Независимо от того, что я отправляю со стороны клиента, я получаю нулевое значение для этого внутреннего контейнера («Транспортные средства»).
Я перепробовал почти все!Я уверен, что проблема где-то в области JSONStringer ...