2012-01-27 4 views
0

私はブログポストのDynamicJsonModelBinderを使用してJavaScriptからJSONデータを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

あなたができることは、クラスを作成し、そのクラスをあなたのクラスにシリアル化することです。

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