2008-11-24 10 views
8

FlexiGrid jQuery eklentisini kullanıyorum ve FlexiGrid sadece nesneyi aldığında yeterince basit ancak bir MVONA uygulamasının bir JSON nesnesi formu almam gerekiyor, ancak düzgün çalışması için yanıt dizisine birkaç öğe eklemem gerekiyor. FlexiGrid ile. Yani buradaJsonResult nesnesini bir dize olarak nasıl alabilirim, böylece onu değiştirebilirim?

benim denetleyicisi kod kısmıdır:

If Request.QueryString("json") IsNot Nothing Then 
    Dim data As New StringBuilder() 
    data.Append("page: " & pageIndex & "," & vbCrLf) 
    data.Append("total: " & ViewData.TotalCount & "," & vbCrLf) 
    data.Append("rows: ") 
    data.Append(Json(objCustomerList)) 

    Return Content(data.ToString()) 
End If 

Maalesef Yukarıdaki kod Json(objCustomerList) döndürüyor 'System.Web.MVV.JsonResult' yerine istenen JSON dize verilerinde. Ne olacağını ve aynı şeyi tekrar görmek için Json(objCustomerList).ToString()'u da denedim.

Herhangi bir fikrin var mı? ASP.NET MVC

cevap

2

Ben codeproject ömeği biraz modifiying sona erdi:

Imports System.Web.Script.Serialization 
Imports System.Reflection 

Public Class FlexiGrid 

    Public Class FlexigridRow 
     Public id As String 
     Public cell As New List(Of String)() 
    End Class 

    Public Class FlexigridObject 
     Public page As Integer 
     Public total As Integer 
     Public rows As New List(Of FlexigridRow)() 
    End Class 

    Public Shared Function GetFlexiGridJSON(ByVal page As Integer, ByVal total As Integer, ByVal o As Object) As String 

     Dim js As New JavaScriptSerializer 
     Dim flexiGrid As New FlexigridObject 
     Dim i As Integer = 0 
     flexiGrid.page = page 
     flexiGrid.total = total 

     For Each c In o 
      Dim r As New FlexigridRow() 
      r.id = i 
      r.cell = GetPropertyList(c) 
      flexiGrid.rows.Add(r) 
      i += i 
     Next 

     Return js.Serialize(flexiGrid) 
    End Function 

    Private Shared Function GetPropertyList(ByVal obj As Object) As List(Of String) 

     Dim propertyList As New List(Of String)() 

     Dim type As Type = obj.[GetType]() 
     Dim properties As PropertyInfo() = type.GetProperties(BindingFlags.Instance Or BindingFlags.[Public]) 
     For Each [property] As PropertyInfo In properties 
      Dim o As Object = [property].GetValue(obj, Nothing) 
      propertyList.Add(If(o Is Nothing, "", o.ToString())) 
     Next 

     Return propertyList 

    End Function 

End Class 

Şimdi benim denetleyicisi Sadece arayıp:

sürece ben geçmek nesne nesneleri listesidir gibi çalıştığını

Return Content(GetFlexiGridJSON(pageIndex, TotalCount, objCustomerList)) 
kusursuzca.

15

Json() yöntem sadece JsonResult sınıfa aracılığıyla JavaScriptSerializer sınıfını kullanıyor. Bir dizeye JSON kullanarak objCustomerList nesnesini serileştirmek istiyorsanız bunu kendiniz kullanabilirsiniz.

Tavsiyem biraz farklı bir yaklaşım benimseyecektir.

  • Oluşturmaya çalıştığınız JavaScript nesnesinin .NET eşdeğerini temsil eden bir Model oluşturun. Belki de Sayfa, Toplam, Satır ve Müşteri Listesi özelliklerine sahip bir FlexiGridModel nesnesi.
  • Sonra FlexiGridModel işe sadece olurdu Json() için, gerek StringBuilder kullanarak JSON dizesi oluşturmak olduğunu geçerken.

Eğer sadece kod sonuçları eklemek için seri hale getirmek için nesne ve StringBuilder götüren bir override on JavaScriptSerializer.Serialize() orada çalışmak istiyorsanız. Tam olarak aradığın şey bu olmalı.

Bazı alakalı linkler:

+0

tam ihtiyacım. Teşekkürler kaşık ve stackoverflow – Hcabnettek

10

Ayrıca yapabilirsiniz:

JsonResult json = ... ; 
JavaScriptSerializer serializer = new JavaScriptSerializer(); 
string yourJsonResult = serializer.Serialize(json.Data); 

Basit olduğu kadar: D

düzenleme: Kod yüksek aydınlatma