【发布时间】:2014-05-18 22:47:23
【问题描述】:
我的 Web API 控制器中有一个如下所示的 POST 方法
public class StudentsController : ApiController {
public HttpResponseMessage Post(ApiStudent apiModel) {
// does processing here
}
}
public class ApiStudent {
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int GraduationClass { get; set; }
// other fields omitted for brevity
}
在 cilent 1 中,我将 ApiStudent 直接添加到 REST 客户端的主体中,这会导致 JSON 没有转义字符。这会在服务器端正确地自动反序列化,但是对于客户端 2,当我通过转义字符发送 JSON 内容时,ApiStudent 会反序列化为 NULL。
// DESERIALIZES PROPERLY ON SERVER
public void Client1() {
var student = new ApiStudent();
student.Id = 0; // new student since it's a post
student.FirstName = "Homer";
student.LastName = "Simpson";
student.GraduationClass = 2014;
var jsonRequest = new RestRequest("http://www.mydomain.com/api/students", Method.POST);
jsonRequest.RequestFormat = DataFormat.Json;
jsonRequest.AddBody(student);
IRestResponse jsonResponse = client.Execute(jsonRequest);
return jsonResponse;
}
// DESERIALIZES AS NULL ON SERVER
public void Client2() {
var jsonContent = "{ \"FirstName\": \"Api\", \"LastName\": \"Test\", \"GraduationClass\": 2014, \"Id\": 0 }";
var jsonRequest = new RestRequest("http://www.mydomain.com/api/students", Method.POST);
jsonRequest.RequestFormat = DataFormat.Json;
jsonRequest.AddBody(jsonContent);
IRestResponse jsonResponse = client.Execute(jsonRequest);
return jsonResponse;
}
使用 fidder,我可以看到客户端 1 通过以下方式发送:
{ "FirstName": "Api", "LastName": "Test", "GraduationClass": 2014, "Id": 0 }
我可以看到客户端 2 通过以下方式发送:
{ \"FirstName\": \"Api\", \"LastName\": \"Test\", \"GraduationClass\": 2014, \"Id\": 0 }
有没有办法去掉转义字符,或者在服务器端正确解析它们?
【问题讨论】:
标签: json asp.net-web-api escaping restsharp