2016-04-26 20 views
0

在我離開並重新創建輪子之前,有誰能告訴我是否有辦法自動執行此操作嗎?我有包含另一個對象類型的陣列的視圖模型,有點像這樣:序列化表單傳遞給ASP.Net Web API

public class ParentViewModel { 
    public int ID { get; set; } 
    public string Title { get; set; } 

    public ChildViewModel[] Children { get; set; } 
} 


public class ChildViewModel { 
    public string Description { get; set; } 
    public int Severity { get; set; } 
} 

我打電話的web API函數採用一個ParentViewModel作爲參數:

[HttpPost] 
    public void Test([FromBody]ParentViewModel vm) { 
    } 

這從可以具有動態數量的子實體的網頁調用。該頁面使用asp.net/Razor創建的,所以這些必然要輸入字段與HTML這樣的:

<input aria-invalid="false" class="form-control" id="Children_0__Description" name="Children[0].Description" value="test" type="text"> 

我有一個使用AJAX來調用Web API,JavaScript事件處理程序。我想將表單數據傳遞給它,所以我將表單序列化,使用deparam將其轉換爲對象,然後在對象上調用JSON.stringify。不幸的是,這並沒有將「Children [0] .Description」這樣的東西變成我的一個對象數組,所以當它碰到web api時,它不會被映射到視圖模型的數組屬性上,也就是說,我的JSON的外觀像這樣:

{ 
    "ID": "12", 
    "Children[0].Severity" : "3", 
    "Children[0].Description" : "Test", 
    "Children[1].Severity" : "5", 
    "Children[1].Description" : "Another", 
    "Title": "Hello" 
} 

,而不是像這樣:

{ 
    "ID": "12", 
    "Children" : [ 
     {"Severity":"3", "Description":"Test"}, 
     {"Severity":"5", "Description":"Another"}, 
     ], 
    "Title": "Hello" 
} 

我正要寫一些代碼來改造JSON,但我猜我現在不是做錯事擺在首位,或者已經有東西會爲我做這件事 - 任何建議?

回答

0

請檢查如果this link與您的問題相同。如果是的話,你需要在你的ajax調用頭中添​​加contenttype。

+0

謝謝Shashank。聽起來很相似,但在我的情況下,我已經有了contentType屬性 –

0

我不確定是否有更好的方法,但我已經解決了這個問題(沒有像向別人描述你的問題來明確你的想法)。問題是deparam不是最好的庫。相反,我發現this圖書館,正是我所需要的。