我有一个定义如下的 web api 方法:
[HttpPost]
public void Post(Input model)
{
...
}
使用这样的输入模型:
public class Input
{
public string Id { get; set; }
public object Extra { get; set; }
}
我想要做的是传递一个有效的 JSON 对象作为额外的参数,就像下面的 jQuery 示例一样:
$.post(
'http://localhost/api/myController',
{
id: 'someId',
extra: {
tags: ['a', 'b'],
anotherValue: 'hello',
oneMore: {
foo: 'bar'
}
}
});
Id正确地进入了我的 model.Id 属性。但是,额外的属性以 {object} 的形式出现,因为我不知道里面有什么,所以我无法以任何方式反序列化它。
我尝试将其设为动态和/或将其转换为动态/ExpandoObject/Dictionary 但没有成功。我知道如果我只收到一个原始的 HttpRequestMessage 并自己处理它,我可能可以让它工作。但是,我宁愿不这样做,而是依赖 .NET 的所有验证。
是否可以?
谢谢
编辑1:在测试了更多替代方案后,我发现额外的属性没有任何实际价值,它只是被初始化为一个新的 object()。看起来默认模型绑定器实现不处理动态 JSON(至少不是这样),只是调用它无法处理的模型属性的默认构造函数。