如何将包含另一个仅状态对象的仅状态对象发送到Web API控制器?

时间:2012-08-02 22:18:03

标签: asp.net-mvc c#-4.0 serialization asp.net-web-api jquery-datatables

我正在尝试将一个简单的对象(AjaxSubmission)从表单发送到用于编辑表的Web API控制器。

AjaxSubmission始终具有相同的字段。一个字段,"数据"是指具有特定表的访问器的另一个简单对象(下面的Employees或Vendors示例)。

public class AjaxSubmission
{
    public string action { get; set; }
    public string table { get; set; }
    public string id { get; set; }
    // ...

    //// The following may be any other custom class
    public Employees data { get; set; } // Could be Vendors or whatever
}

// Stored in AjaxSubmission (or so I hope) 
public class Employees
{
    public string name { get; set; }
    public float salary { get; set; }
    public long id { get; set; }
}

// Stored in AjaxSubmission 
public class Vendors
{
    public string dba { get; set; }
    public int accountNum { get; set; }
    public int zipcode { get; set; }
}

我的控制器获得如下数据:

public EditorServerResponse Put(AjaxSubmission ajaxSubmission = null) {
    // Handle the data
}
  • 当我制作"数据"一个对象或动态,它显示为一个空对象。我不能" as"它适用于员工或供应商,因为它不存储任何东西。
  • 我怀疑这是序列化程序的限制。 MVC4使用JSON.NET作为JSON,但数据以" Content-Type:application / x-www-form-urlencoded发送;字符集= UTF-8"
  • 我无法轻易改变数据的发送方式,因为这就是Datatables编辑器插件的业务方式。我认为这是发送数据的合理方式,也是.NET能够处理的合理问题。
  • 如果我为AjaxSubmission可能包含的每种数据类型创建一个不同的类,我可以获得所需的数据,但除了一行代码之外,每个数据类型都是重复的。这可怕地违反了DRY原则。

我的问题是:如何在不重复自己的情况下发送AjaxSubmission? .NET能够做到这一点吗?

编辑: Fiddler说数据看起来像:

action  edit
table   
id  row_4
data[amu]   49
data[chemicalFormula]   BF2
data[commonName]    Boron difluoride
data[status]    Y
data[notes] 

原始数据是:     行动=编辑&安培;表=安培; ID = row_4&安培;数据%5Bamu%5D = 49&安培;数据%5BchemicalFormula%5D = BF2&安培;数据%5BcommonName%5D =硼+氟&安培;数据%5Bstatus%5D = Y&安培;数据%5Bnotes% 5D =

(这与我的简化示例不同,但类似)

0 个答案:

没有答案