post中的Json对象在web api中不被识别为对象



我有一个角客户端,并希望执行get请求到我的web api后端,从底层的Dapper Db Wrapper获得项目列表。Dapper允许我以匿名对象的形式传递参数,它看起来像这样:

connection.GetList<T>(new {myParam1:"a", myParam2: true});

我想要实现的是,在我的角前端创建这个参数对象,并在post请求中将其传递给服务器,然后将其传递给GetList函数。这里的问题是,web api不反序列化它作为一个(匿名)对象,而是和IEnumerable的JTokens?

我的web api签名是:

public async Task<IHttpActionResult> MyFunction([FromBody]dynamic whereCond)

我也尝试将对象作为字符串封装在外部对象中,就像这样(angular客户端):

this.migController.MigrationGetMigrationReports({whereCond: JSON.stringify({NotMigrated: true, MissingTargetFiles: 0})})

,然后在服务器上手动将其反序列化为JObject:

string obj = whereCond.whereCond;
dynamic pObj = JObject.Parse(obj);

但是这导致了完全相同的结果:pObj是一个IEnumerable,因此我从GetList调用中得到一个错误消息:

在此上下文中不允许使用可枚举的形参序列(数组、列表等)

有人能帮忙吗?

我的问题的答案很简单:

dynamic pObj = JObject.Parse(obj).ToObject<ExpandoObject>();

我必须将它转换为ExpandoObject而不仅仅是动态的

@Tsahi:这不是设计问题。我的目的是为服务器提供参数(过滤器),这是客户端减少要传输的数据集的常见任务。但是,我们可以讨论如何提供这些参数的标准方法。在我的特殊情况下,最实用的方法是匿名对象。

最新更新