Search code examples
c#jsonweb-servicesrestsharp

RestSharp AddBody adding double quote in JSON parameter


I am calling API with RESTSharp

  var client = new RestClient("http://demoservice.com");
  var request = new RestRequest("callapi", "put");          
  request.RequestFormat = DataFormat.Json;

string jsonaction = "{\"tokenid\":\"x123x45\",\"userid\":\"2456\",\"ip\":\"192.168.1.20\",\"transaction\":\"6\",\"actionCode\":\"78\",\"jtoken\":\"systemtoken\"}";
request.AddBody(new { action = "SAVE", data = "savedata", token = "systemtoken", jsonaction = jsonaction });

I am checking in debug data passing in request. and my expected output as follows

{"action":"SAVE","data":"savedata","token":"systemtoken","jsonaction":{"tokenid":"x123x45","userid":"2456","ip":"192.168.1.20","transaction":"6","actionCode":"78","jtoken":"systemtoken"}}

But getting

{"action":"SAVE","data":"savedata","token":"systemtoken","jsonaction":"{"tokenid":"x123x45","userid":"2456","ip":"192.168.1.20","transaction":"6","actionCode":"78","jtoken":"systemtoken"}"}

If anybody can guide how to post for JSON I have tried with Addbody and AddJsonBody but nothing works.


Solution

  • You can do this using the request.AddParameter() method:

    request.Method = Method.POST;
    request.AddHeader("Accept", "application/json");
    request.Parameters.Clear();
    request.AddParameter("application/json", data , ParameterType.RequestBody);
    
    var response = client.Execute(request);
    var content = response.Content; // raw content as string  
    

    Where data is of the format:

    data :
    
    {
      "action":"dosomething" ,
      "data":"somedata" ,
      "token":"sometoken",
      "jsonAction": {
        "tokenId": "",
        ...
    }
    

    Hope it helps!