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

Convert FormCollection to object of type known only at runtime

我的控制器带有包含代码的操作,看起来像

public ActionResult Index(FormCollection data)
{
    var type = findTypeByName(data["CastToTypeName"]);
    var model = transformRequestDataToType(data/* or may be Request*/, type) as DbEntity;
    SaveData(model);
    ...
}

有什么方法可以将请求数据转换为运行时已知类型的对象吗? 我 post 使用 <form> 向控制器发送数据,并尝试在不将表单数据更改为 json.

的情况下找到解决方案

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

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

a.name
a.items.Index
a.items[0].name
a.items[0].desc
a.items.Index
a.items[1].name
a.items[1].desc

接下来我在使用 js 提交之前提取表单数据,防止表单提交并发送 ajax post 请求和表单数据到 url 在 action 表单属性中定义.在服务器端,我解析数据并将其递归分配给给定类型实例的属性。因此,当设置 CastToTypeName 值时,我可以 ParseAs<MyType>(Request) 甚至 ParseAsGiven(Request)