Как я могу получить объект JsonResult в виде строки, так что я могу изменить его?

голоса
8

Я использую Flexigrid JQuery плагин, и я должен получить объект JSON обратно сформировать мое MVC приложение, достаточно просто, если Flexigrid взял только объект, но мне нужно добавить несколько элементов в строке ответа для того, чтобы правильно работать с Flexigrid ,

Так вот часть моего кода контроллера:

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

К сожалению , в приведенном выше коде Json(objCustomerList)возвращает «System.Web.MVV.JsonResult» вместо искомых строк данных в формате JSON. Я также попытался Json(objCustomerList).ToString()просто посмотреть , что произойдет , и то же самое снова.

Есть идеи?

Задан 24/11/2008 в 01:17
источник пользователем
На других языках...                            


4 ответов

голоса
15

Json()метод в ASP.NET MVC просто используя JavaScriptSerializerкласс по JsonResultклассу. Вы можете использовать это самостоятельно , если вы хотите сериализовать objCustomerList объект , используя JSON в строку.

Моя рекомендация будет принимать несколько иной подход.

  • Создание модели, отображающей .NET эквивалент объекта JavaScript вы пытаетесь создать. Может быть, FlexiGridModel объект со свойствами страницы, общее, Rows и CustomerList.
  • Затем , когда вы передаете , что FlexiGridModel на Json()это будет просто работать, не нужно , чтобы создать строку JSON , используя StringBuilder.

Если вы просто хотите , чтобы ваш код для работы есть переопределение наJavaScriptSerializer.Serialize() который принимает объект для сериализации и StringBuilderдобавлять результаты в. Какой должна быть именно то , что вы ищете.

Некоторые соответствующие ссылки:

Ответил 24/11/2008 в 01:23
источник пользователем

голоса
0

В данной статье описывается, как получить Flexigrid работы с MVC шаг за шагом:

образец ASP.NET MVC Flexigrid

Ответил 24/11/2008 в 18:58
источник пользователем

голоса
2

Я в конечном итоге модифицирования пример Codeproject немного:

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

Теперь в моем контроллере я просто позвонить:

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

До тех пор, пока объект проходит список объектов, которые он прекрасно работает.

Ответил 25/11/2008 в 18:32
источник пользователем

голоса
10

Вы также можете сделать это:

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

Простой, как: D

Редактирование: ст.байт освещение

Ответил 11/03/2010 в 11:23
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more