我目前是这样做:
[HttpPost]
void Foo(Dictionary<string,object> prm)
{
var sql = "whatever";
var sqlPrms = new List<SqlParameter>();
if (prm.TryGetValue("Condition1",out var c1))
{
sql += " and Condition1=@c1";
sqlPrms.Add(new SqlParameter("c1", c1));
}
if (prm.TryGetValue("Condition2", out var c2))
{
sql += " and Condition2=@c2";
sqlPrms.Add(new SqlParameter("c2", c2));
}
ExecuteSql(sql, sqlPrms);
}
prm是不确定的条件集合,所以我不能定义一个明确的类,但是用Dictionary的话,问题在于Value只能是object类型,这样在框架进行json反序列化时,可能得不到正确的类型,比如[1,2,3]不会得到int[],所以我想请教这种情况成熟的做法是怎样的?
如果你的 JSON 序列化库用的是 Newtonsoft.Json,可以直接用
JToken
当 Value:P.S. 我看你这里 Key 是确定的啊,不存在同一个 Key 即能是字符串又能是数组的情况,为啥不能定义明确的类?反序列化后你的条件判断里判断是否该字段是
null
就行了呀,是null
就说明客户端没传呗。