如何将json添加到RestSharp POST请求中

我有以下JSON字符串作为字符串参数传递到我的c#代码 – AddLocation(string locationJSON):

{"accountId":"57abb4d6aad4","address":{"city":"TEST","country":"TEST","postalCode":"TEST","state":"TEST","street":"TEST"},"alternateEmails":[{"email":"TEST"}],"alternatePhoneNumbers":[{"phoneNumber":"TEST"}],"alternateWebsites":[{"website":"TEST"}],"auditOnly":false,"busName":"593163b7-a465-43ea-b8fb-e5b967d9690c","email":"TEST EMAIL","primaryKeyword":"TEST","primaryPhone":"TEST","rankingKeywords":[{"keyword":"TEST","localArea":"TEST"}],"resellerLocationId":"5461caf7-f52f-4c2b-9089-2ir8hgdy62","website":"TEST"} 

我正在尝试将JSON添加到像这样的RestSharp POST请求但它不起作用:

 public string AddLocation(string locationJSON) { var client = new RestClient(_authorizationDataProvider.LocationURL); var request = new RestRequest(Method.POST); request.RequestFormat = DataFormat.Json; request.AddHeader("cache-control", "no-cache"); request.AddHeader("Authorization", _authorizationResponse.Token); ... request.AddJsonBody(locationJSON); var response = client.Execute(request); } 

响应回复为“错误请求”。 如果我在调试器中检查响应,这是我得到的:

 {"code":"invalid_json","details":{"obj.address":[{"msg":["error.path.missing"],"args":[]}],"obj.rankingKeywords":[{"msg":["error.path.missing"],"args":[]}],"obj.alternatePhoneNumbers":[{"msg":["error.path.missing"],"args":[]}],"obj.busName":[{"msg":["error.path.missing"],"args":[]}],"obj.accountId":[{"msg":["error.path.missing"],"args":[]}],"obj.alternateEmails":[{"msg":["error.path.missing"],"args":[]}],"obj.alternateWebsites":[{"msg":["error.path.missing"],"args":[]}],"obj.email":[{"msg":["error.path.missing"],"args":[]}],"obj.primaryKeyword":[{"msg":["error.path.missing"],"args":[]}],"obj.auditOnly":[{"msg":["error.path.missing"],"args":[]}]}} 

我在调用AddJsonBody之后检查了请求参数,并且值似乎包括双引号的转义序列 – 这似乎是个问题。

 {\"accountId\":\"57abb4d6aad4def3d213c25d\",\"address\":{\"city\":\"TEST\",\"country\":\"TEST\",\"postalCode\":\"TEST\",\"state\":\"TEST\",\"street\":\"TEST\"},\"alternateEmails\":[{\"email\":\"TEST\"}],\"alternatePhoneNumbers\":[{\"phoneNumber\":\"TEST\"}],\"alternateWebsites\":[{\"website\":\"TEST\"}],\"auditOnly\":false,\"busName\":\"84e7ef98-7a9f-4805-ab45-e852a4b078d8\",\"email\":\"TEST EMAIL\",\"primaryKeyword\":\"TEST\",\"primaryPhone\":\"TEST\",\"rankingKeywords\":[{\"keyword\":\"TEST\",\"localArea\":\"TEST\"}],\"resellerLocationId\":\"06b528a9-22a6-4853-8148-805c9cb46941\",\"website\":\"TEST\"} 

所以我的问题是如何将json字符串添加到请求主体?

我也遇到过这个问题。 尝试这样的东西而不是AddJsonBody

 request.AddParameter("application/json", locationJSON, ParameterType.RequestBody); 

这应该工作:

 request.AddParameter("application/json; charset=utf-8", JsonConvert.SerializeObject(yourObject), ParameterType.RequestBody); 

如果直接添加序列化对象,问题是Json转换在每个“之前”添加“\”。

我试过这样,工作正常,

  request.AddHeader("cache-control", "no-cache"); request.AddHeader("authorization", "Bearer " + 'your token key'); request.AddHeader("accept", "application/json");