RestSharp将Json对象序列化为Post参数

时间:2014-01-10 02:57:31

标签: c# json json.net restsharp http-post

我正在研究这个需要序列化JSON对象以使用RestSharp发布参数的项目,下面是我的代码:

        var request = new RestRequest();
        request.Method = Method.POST;
        request.RequestFormat = DataFormat.Json;

        request.AddBody(jsonObject);
        return client.Execute<dynamic>(request);

我意识到不是将每个JSON名称值对添加为post参数,request.AddBody将整个JSON字符串添加为一个大的post参数。我的问题是,有没有办法让request.AddBody方法将每个JSON名称 - 值对添加为单独的帖子参数?我知道request.AddParameter()完成了这项工作,但这需要手动添加每个参数。

而不是:

     [0]:{
           application/json="
           {
               "name":"john doe",
               "age": "12",
               "gender": "male"}
           }
         }

期望的结果:

     [0]:"name":"john doe"
     [1]:"age":"12"
     [2]:"gender":"male"

3 个答案:

答案 0 :(得分:5)

request.AddObject(jsonObject)

应该做你期望的事情

引自RestSharp docs

  

要将对象的所有属性添加为参数,请使用AddObject()。

答案 1 :(得分:1)

答案似乎是遍历您的jsonObject并将每个所需的JSON名称 - 值对转换为参数。要执行此操作,您可以在循环中使用request.AddParameter方法,该循环使用以下内容迭代jsonObject的名称 - 值对:

foreach (var pair in jsonObject) 
{ 
    request.AddParameter(pair.Key, pair.Value); 
}

这可能过于简单,但使用像JSON.NET这样的库,应该很容易做到。然后你可以将这个功能包装到一个漂亮的小方法中并随意重用。没有体力劳动。

注意:您可能希望删除现有代码中的行request.RequestFormat = DataFormat.Json,因为JSON正是您似乎不希望POST的行。

答案 2 :(得分:1)

有一个类似的问题,发现了这个帖子。提出了一个简单的方法,我想我会分享,以防它人帮助。

诀窍是使用匿名对象和AddJsonBody()。

request.AddJsonBody(new { name = "john doe", age = "12", gender = "male" });

RestSharp会自动将匿名对象序列化为所需的JSON ...

{
    "name":"john doe",
    "age": "12",
    "gender": "male"
}