Bạn có thể thực hiện việc này khá dễ dàng với một trình kết nối mô hình tùy chỉnh. Đây là những gì làm việc cho tôi. (Sử dụng Web API 2 và JSON.Net 6)
public class JsonPolyModelBinder : IModelBinder
{
readonly JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var content = actionContext.Request.Content;
string json = content.ReadAsStringAsync().Result;
var obj = JsonConvert.DeserializeObject(json, bindingContext.ModelType, settings);
bindingContext.Model = obj;
return true;
}
}
Bộ điều khiển API Web trông như thế này. (Lưu ý: cũng nên làm việc cho những hành động MVC thường xuyên - Tôi đã làm điều gì đó như thế này cho họ trước khi là tốt.)
public class TestController : ApiController
{
// POST api/test
public void Post([ModelBinder(typeof(JsonPolyModelBinder))]ICommand command)
{
...
}
}
Tôi cũng nên lưu ý rằng khi bạn serialize JSON, bạn nên serialize nó với cùng một thiết lập, và tuần tự hóa nó như là một giao diện để làm cho tự động khởi động và bao gồm gợi ý kiểu. Một cái gì đó như thế này.
JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
string json = JsonConvert.SerializeObject(command, typeof(ICommand), settings);
Nguồn
2014-03-09 06:36:56
Vì lợi ích của thời gian, tôi đã quyết định thay đổi WebAPI POST của mình để chấp nhận một chuỗi chứa XML. Tôi dự định sẽ quay lại sau này. –