2012-01-27 176 views
0

我使用博客文章中的DynamicJsonModelBinder將我的JSON數據從JavaScript傳遞到我的ASP.NET MVC控制器,作爲DynamicJsonObject通過DynamicJsonObject迭代

看一看博客文章:http://blog.duc.as/2011/06/07/making-mvc-3-a-little-more-dynamic/

我將它轉換爲我的項目到VB.NET:http://pastebin.com/p3cfHSab

Imports System.Dynamic 
Imports System.Web.Helpers 


Namespace MyNameSpace 
    Public Class TestController 

     Inherits System.Web.Mvc.Controller 

     Function Index(<DynamicJson()> obj As DynamicJsonObject) As ActionResult 
      Dim output As String = "" 
      Dim members As IEnumerable(Of String) = obj.GetDynamicMemberNames() 
      For Each item In members 
       output += item + vbCrLf 
      Next 
      Return Content(output) 
     End Function 

    End Class 
End Namespace 

客戶端:

var jsonObject = { "ID": "123", "NAME": "Mr. Rosema", "TEST": "123"}; 
$.ajax({ 
    url: "/Test", 
    type: "POST", 
    contentType: "application/json", 
    data: 
     JSON.stringify(jsonObject) 
    , 
    success: function (data) { 
    } 
}); 

這工作。在我的控制器中,我可以像這樣訪問我的jsonObject:obj.ID '123

但是我還沒有想法如何遍歷所有屬性。我可以將所有成員名稱作爲IEnumerable字符串集合(obj.GetDynamicMemberNames()),但是如何使用TryGetMember方法訪問成員的值?

+0

我不是一個VB的開發者,但你能不能作爲字典訪問值? ex'obj [「ID」]' – Lester 2012-01-27 17:00:38

+0

是的,我想知道爲什麼作爲字典訪問值不起作用,雖然有一個私人的_dictionary成員基礎。 – terabaud 2012-01-27 23:32:10

回答

1

你可以做的是創建一個類,然後將該json序列化爲你的類。

Class Info 
    public property ID as integer 
    public property NAME as string 
    public property TEST as string 
end class 

控制器代碼:

Function Index(byval input as Info) As ActionResult 
    Return Content(input.NAME) 
End Function 

客戶端代碼:

var jsonObject = {"input": { "ID": "123", "NAME": "Mr. Rosema", "TEST": "123"}}; 
$.ajax({ 
    url: "/Test", 
    type: "POST", 
    contentType: "application/json", 
    data: JSON.stringify(jsonObject), 
    success: function (data) { 
    } 
}); 
+1

這就是我當前如何將我的json數據傳遞給控制器​​的方式。但是我正在尋找一種避免在我的json結構發生變化時重新編譯我的模型類的方法。 – terabaud 2012-01-28 12:07:10