在我的Web API中定义的Controller中,我有这个动作:
[HttpPut]
[Route("api/validation/validate/")]
public IHttpActionResult Validate(FromBody]object instance)
{
...
}
参数必须是object类型,因为它是一个应该支持任何类型的单一入口点。
内部将导致此代码:
var personDto = (PersonDto)this.ValidationInfo.Instance;
这不起作用,因为我收到了这个错误:
无法将类型为“Newtonsoft.Json.Linq.JObject”的对象强制转换为类型 'PersonDto'。
相反,我试图反序列化:
var person = JsonConvert.DeserializeObject<PersonModel>(this.ValidationInfo.Instance);
但这也不起作用,因为JsonConvert.DeserializeObject
需要一个字符串。
我该怎么做才能解决这个问题?
附录
public class ValidationInfo
{
public string Prefix { get; set; }
public ValidationContext ValidationContext { get; set; }
public object Instance { get; set; }
}
public sealed class ValidationContext
{
public string LanguageCode { get; set; }
public DossierTypes DossierType { get; set; }
public RoleTypes RoleType { get; set; }
}
用法
self.ValidateServerAsync = function (entityInstance) {
var uri = "api/validation/validate/";
return apiService.Put(uri, entityInstance);
}
以上是自定义编写ValidationService
中的函数,使用过的apiService
处理$http
放置。两者都是AngularJS服务。
(不要认为我需要进入他们,因为他们工作)