2012-01-27 7 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 String Collection (obj.GetDynamicMemberNames()), но как использовать метод TryGetMember для доступа к значению члена?

+0

Я не разработчик VB, но вы можете не получить доступ к значениям в качестве словаря? ex 'obj [" ID "]' – Lester

+0

Да, мне было интересно, почему доступ к значениям в качестве словаря не работает, хотя имеется частный член _dictionary. – terabaud

ответ

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

Смежные вопросы