我正在从事Web API项目,并使用大规模执行数据库任务。在我的控制器中,我希望发布方法接受动态对象,因此可以直接通过大量Insert
方法使用它。
public class LinkController : ApiController
{
public IHttpActionResult Post(dynamic link)
{
dynamic model = new Massive.DynamicModel("main", tableName: "Links", primaryKeyField: "Id");
return Ok(model.Insert(link));
}
}
和帖子请求中发送以下JSON:
{
"Name":"StackOverflow",
"Url":"http://www.stackoverflow.com",
"Description":"My most visited web site!",
"FolderId":2
}
我的问题是JSON.NET的方式。当调用Post
方法时,链接参数具有预期的4个属性但是它们是类型newtonsoft.json.linq.jvalue而不是某些原始类型(用于名称的Explample字符串),而大规模不能处理jvalue对象。
我需要强制参数具有其属性的原始类型(通过创建自定义jsonConverter,调整Web API模型绑定,...)。
您能做的最好的就是将DTO划分为ExpandoObject
:
// config.GetType() == typeof(HttpConfiguration)
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new ExpandoObjectConverter());
当您访问其属性时,它仍然是一个动态对象,因为它们是在常规类中设计的。