我正在处理Web API项目并使用Massive执行数据库任务。
在我的控制器中,我希望Post方法接受动态对象,因此可以直接使用Massive 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));
}
}
在POST请求中发送以下JSON:
{
"Name":"StackOverflow",
"Url":"http://www.stackoverflow.com",
"Description":"My most visited web site!",
"FolderId":2
}
我的问题是JSON.Net反序列化JSON的方式。调用Post
方法时,链接参数具有预期的4个属性
但它们的类型为Newtonsoft.Json.Linq.JValue不是一些原始类型(对于Name的expample字符串)而Massive不能
处理JValue对象。
我需要强制参数为其属性提供原始类型(通过创建自定义JsonConverter,调整Web API模型绑定,...)。
答案 0 :(得分:0)
您可以做的最好的事情是将您的DTO反序列化为ExpandoObject
:
// config.GetType() == typeof(HttpConfiguration)
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new ExpandoObjectConverter());
当您访问其属性时,它仍然是一个动态对象,因为它们是在具有.NET CLR类型的常规类中设计的。