【问题标题】:ASP.NET Web API - Not Deserializing JSON with Escape CharactersASP.NET Web API - 不使用转义字符反序列化 JSON
【发布时间】: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


    【解决方案1】:

    我找到了一个解决方法,我希望它可以帮助别人。

    // NOW DESERIALIZES PROPERLY ON THE 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.AddParameter("text/json", jsonContent, ParameterType.RequestBody);
        IRestResponse jsonResponse = client.Execute(jsonRequest);            
        return jsonResponse;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多