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

Я использую подключаемый модуль 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(), просто чтобы посмотреть, что произойдет, и снова то же самое.

Есть идеи?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
12 274
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Я бы порекомендовал немного другой подход.

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

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

Некоторые релевантные ссылки:

именно то, что мне нужно. Спасибо ложка и stackoverflow

Hcabnettek 18.11.2010 21:48
Ответ принят как подходящий

В итоге я немного изменил пример 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))

Пока объект, который я передаю, является списком объектов, он работает отлично.

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

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

Вот так просто: D

изменить: код высокого освещения

Другие вопросы по теме