【发布时间】:2013-02-03 20:28:42
【问题描述】:
我有一个 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 属性。但是,extra 属性是作为 {object} 出现的,由于我不知道其中有什么,我无法以任何方式对其进行反序列化。
我尝试使其 dynamic 和/或将其转换为 dynamic/ExpandoObject/Dictionary 但没有成功。我知道如果我只收到一个原始的 HttpRequestMessage 并自己处理它,我可能可以让它工作。但是,我宁愿不这样做,而是依赖 .NET 的所有验证。
有可能吗?
谢谢
编辑 1: 在测试了更多替代方案后,我发现 extra 属性没有任何实际价值,它只是初始化为 new object() 。看起来默认模型绑定器实现不处理动态 JSON(至少不是这样),只是调用它无法处理的模型属性的默认构造函数。
【问题讨论】:
-
@SanjaMelnichuk 我不明白这对我有什么帮助。我没有可用于传递给反序列化器的 JSON 字符串。我只有模型对象。
标签: c# json asp.net-web-api json.net deserialization