C# 将FormCollection转换为仅在运行时已知类型的对象

C# 将FormCollection转换为仅在运行时已知类型的对象,c#,asp.net-mvc,formcollection,C#,Asp.net Mvc,Formcollection,我有一个控制器,其动作包含代码,如下所示 public ActionResult Index(FormCollection data) { var type = findTypeByName(data["CastToTypeName"]); var model = transformRequestDataToType(data/* or may be Request*/, type) as DbEntity; SaveData(model); ... } 有没有

我有一个控制器,其动作包含代码,如下所示

public ActionResult Index(FormCollection data)
{
    var type = findTypeByName(data["CastToTypeName"]);
    var model = transformRequestDataToType(data/* or may be Request*/, type) as DbEntity;
    SaveData(model);
    ...
}
有没有办法将请求数据转换为运行时已知类型的对象?
我将数据发布到控制器,并尝试在不将表单数据更改为json的情况下找到解决方案。

首先,我将输入名称符号简化为:

a.name
a.items\
a.items/name
a.items/desc
a.items\
a.items/name
a.items/desc


接下来,我使用js在提交之前提取表单数据,阻止表单提交,并将带有表单数据的ajax post请求发送到action表单属性中定义的url。在服务器端,我解析数据并递归地将其分配给给定类型的实例的属性。因此,当设置CastToTypeName值时,我可以解析AsRequest,甚至可以解析AsGivenRequest。

这看起来很危险。对于恶意用户来说,这是一个非常方便的方法来修改他们想要的任何DB数据。这是一个小型站点的管理部分,所以我只是通过为控制器添加auth来阻止任何此类可能性。在我看来,您忘记了强制表单类实现接口。如果你想让MVC发挥作用,这是非常关键的。
a.name
a.items.Index
a.items[0].name
a.items[0].desc
a.items.Index
a.items[1].name
a.items[1].desc