RestSharp POST对象为JSON

时间:2017-06-20 07:34:06

标签: c# json restsharp

这是我的班级:

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,但无法理解出现了什么问题。

3 个答案:

答案 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

设置RestSharp将执行的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;
}