这是我的班级:
public class PTList
{
private String name;
public PTList() { }
public PTList(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
和我的RestSharp POST请求:
protected static IRestResponse httpPost(String Uri, Object Data)
{
var client = new RestClient(baseURL);
client.AddDefaultHeader("X-Authentication", AuthenticationManager.getAuthentication());
client.AddDefaultHeader("Content-type", "application/json");
var request = new RestRequest(Uri, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddJsonBody(Data);
var response = client.Execute(request);
return response;
}
当我使用带有良好URI和PTList对象的httpPost方法时,“name”为空的前API anwser。 我认为我的PTList对象在API请求中没有被序列化为有效的JSON,但无法理解出现了什么问题。
答案 0 :(得分:1)
默认情况下,RestSharp使用的Json序列化程序不会序列化私有字段。所以你可以像这样改变你的课程:
array.unshift(7);
它会正常工作。
如果默认序列化程序的功能不够(据我所知 - 您甚至无法使用它重命名属性,例如将public class PTList
{
public PTList() { }
public PTList(String name) {
this.name = name;
}
public string name { get; set; }
}
序列化为Name
) - 您可以使用更好的序列化程序和JSON.NET一样,例如描述here。
答案 1 :(得分:1)
你可以试试这个而不是AddJsonBody:
request.AddParameter(" application / json; charset = utf-8",JsonConvert.SerializeObject(Data),ParameterType.RequestBody);
这是其中一个解决方案:How to add json to RestSharp POST request
答案 2 :(得分:1)
我可以看到几个问题。
首先,您发送的对象没有公共字段,我也会简化定义:
public class PTList
{
public PTList() { get; set; }
}
第二个问题是您通过设置Content-Type
request.RequestFormat = DataFormat.Json
标头
我也很想使用泛型而不是Object
您的httpPost方法将成为:
protected static IRestResponse httpPost<TBody>(String Uri, TBody Data)
where TBody : class, new
{
var client = new RestClient(baseURL);
client.AddDefaultHeader("X-Authentication", AuthenticationManager.getAuthentication());
var request = new RestRequest(Uri, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddJsonBody(Data);
var response = client.Execute(request);
return response;
}