2014-02-24 228 views
1

我正在使用json傳遞json和使用jquery和ajax進行標記的方法。這可以更詳細此頁面上的描述:http://blogs.telerik.com/aspnet-ajax/posts/12-04-27/the-present-and-future-of-using-json-in-webforms.aspx如何動態設置JsonObject的屬性?

在這個代碼片段,我嘗試通過名爲「test」的字符串變量設置爲業務對象的值動態地設置對象的值:

 Dim objOrder As Object = New JsonObject() 
     For Each Order As BoVendorOrder In Orders 
      Dim Vendor As New BoVendor(Order.VendorID) 
      Dim test As String = Order.VendorOrderID 
      objOrder.test = Vendor.VendorName + " - " + Order.VendorOrderPoNumber 
     Next 

爲了簡潔,我省略了一些代碼。我們的目標是讓objOrder.test是等於VendorOrderID(在我們的SQL數據庫的數字),以便JSON看起來像這樣:

 { 
      "123456": "VendorName - PONumber", 
      "678901": "VendorName - PONumber" 
     } 

任何的你們那裏知道如何做到這一點?

回答

1

你是否真的需要訂單ID作爲對象的屬性?只是返回一個序列化的字典(字符串,字符串)可能會更容易。您仍然可以通過訂單ID查找,並且比Javascript對象的道具更容易循環。

下面是你需要使用字典的方式做一個例子:

Dim OrdersDict as New Dictionary(Of String, String)() 
For Each Order as BoVendorOrder In Orders 
    If Not OrdersDict.ContainsKey(Order.VendorOrderID) Then 
     OrdersDict.Add(Order.VendorOrderID, Vendor.VendorName + " - " + Order.VendorOrderPoNumber) 
    End If 
Next 

' Serialize the dictionary object to JSON 

' Using System.Web.Script.Serialization.JavascriptSerializer: 
Dim Serializer As New JavaScriptSerializer 
If MaxLength Then Serializer.MaxJsonLength = Int32.MaxValue 
Dim x as String = Serializer.Serialize(OrdersDict) 'Return or response.write x as needed 

'or 

'Using JSON.net 
Dim x as String = JsonConvert.SerializeObject(OrdersDict) 'Return or response.write x as needed 
+0

不,我不需要orderIDs爲對象的屬性。我有一個解決方法,目前正在運行。我基本上建立一個字符串,並添加orderID作爲屬性的方式。代碼有點乏味/醜陋,我想知道這是否有可能。至於你的建議,我從來沒有用過字典(字符串,字符串)。我準備使用jquery在我的標記中循環使用json,所以我不需要使用vb查找orderID。谷歌字典(字符串,字符串),看看看起來像什麼。謝謝=) – Primalpat

+0

嘿,真的很感激這個例子!我非常喜歡MaxLength的部分。在我的項目中遵循您的示例時,它不是爲我定義的。我已經導入了'System.Web.Script.Serialization'。而且,這比我在做解決方案時要乾淨得多。 – Primalpat

+0

對不起,我從我的一些代碼中複製出來了。我們傳遞一個布爾值MaxLength,如果設置爲True,則會設置生成的json字符串的最大長度,所以我們不會寫太多。我想我們補充說,因爲我們遇到了真正很長的數組,其中包含許多具有很多屬性的對象。在這種情況下,你可能會忽略這一點。 –