2013-07-30 45 views
1

傳遞模型我有一個模型,像這樣在javascript:動態JSON對象到MVC控制器

function SomeModel() 
{ 
    this.Id = ko.observable(); 
    this.Name = ko.observable(); 
    this.MetaData = {}; 
} 

然後我需要發送這MVC這樣我就可以在MongoDB中堅持它,但是我不知道怎麼回事最好保存在C#中表示元數據......作爲模型的樣子:

public class SomeModel 
{ 
    public Guid Id {get;set;} 
    public string Name {get;set;} 
    public object MetaData {get;set;} 
} 

但是它不喜歡的JSON對象綁定的對象,我不知道我是否應該使用ExpandoObject什麼,因爲我對c#mvc服務中的數據訪問並不感興趣,所以它是onl y用於前端的插件,可以將它們自己的數據存儲在對象上供以後使用。因此,一個例子是:

var someModel = new SomeModel(); 
someModel.MetaData.Bookmarks = []; 
someModel.MetaData.Bookmarks.push({ location: 120, document: 23003032 }); 

,因此它可以包含任何與子對象,就像我說我只是需要將其塞子成一個對象只是作爲傳輸機制蒙戈,這將罰款保存它作爲無模式。

目前,來自JS的模型通過jquery通過ajax發送,然後自動綁定在控制器中,然後發送到存儲庫。

== ==編輯

我已經做了與MVC4一些小測試,我可以把我的模型內的expando對象,並填充它,但它似乎只存儲1層的數據,所以如果我是回傳:

..., 
MetaData: { 
    something: { 
     one: 1, 
     two: 2 
    } 
}, 
... 

我最終會與元數據領域寂寂something場我的expando對象,但不會存儲任何優先遍歷下面的數據,那麼有沒有什麼辦法存儲上面的內容,而不是將它轉換成一串json來存儲?

回答

1

由於似乎沒有可靠的答案,我只需在jquery ajax中執行額外的步驟即可將所有「元數據」字段轉換爲json字符串,然後將其作爲字符串存儲在服務器上。

然後,如果我需要訪問或更改我使用Web助手Json.Encode/Decode它返回一個動態的數據,那麼我可以再補充的子元素,我因爲這樣做:

  • 匿名類型簡單附帶的JSON對象
  • 清單的數組元素

然後我編碼它再次鑄造動態作爲對象。