2014-02-24 233 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字符串的最大长度,所以我们不会写太多。我想我们补充说,因为我们遇到了真正很长的数组,其中包含许多具有很多属性的对象。在这种情况下,你可能会忽略这一点。 –