Как создать данные JSON с помощью .NET? - PullRequest
6 голосов
/ 23 июня 2011

В настоящее время я строю данные json следующим образом:

<%@ Page Language="VB" Debug="True" EnableViewState="false" %>

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.IO" %>

<script runat="server">
    Dim objSQLConnection As SqlConnection
    Dim objSQLCommand As SqlCommand
    Dim objSQLDataReader As SqlDataReader
    Dim objJSONStringBuilder As StringBuilder

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Response.Clear()
        Response.ContentType = "application/json"
        Response.Write(get_json())
        Response.End()
    End Sub

    Function get_json() As String
        objJSONStringBuilder = New StringBuilder()
        objSQLConnection = New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connString"))

        objSQLCommand = New SqlCommand("sql query goes here", objSQLConnection)

        objJSONStringBuilder.Append("[")

        objSQLCommand.Connection.Open()
        objSQLDataReader = objSQLCommand.ExecuteReader()

        While objSQLDataReader.Read()
            objJSONStringBuilder.Append("{")
            objJSONStringBuilder.Append("""col1""")
            objJSONStringBuilder.Append(":")
            objJSONStringBuilder.Append("""" & objSQLDataReader("col1") & """")
            objJSONStringBuilder.Append(",")
            objJSONStringBuilder.Append("""col2""")
            objJSONStringBuilder.Append(":")
            objJSONStringBuilder.Append("""" & objSQLDataReader("col2") & """")
            objJSONStringBuilder.Append(",")
            objJSONStringBuilder.Append("""col3""")
            objJSONStringBuilder.Append(":")
            objJSONStringBuilder.Append("""" & objSQLDataReader("col3") & """")
            objJSONStringBuilder.Append("},")
        End While

        objSQLDataReader.Close()
        objSQLCommand.Connection.Close()

        objJSONStringBuilder.Remove(objJSONStringBuilder.Length - 1, 1)

        objJSONStringBuilder.Append("]")

        Return objJSONStringBuilder.ToString
    End Function
</script>

Является ли это предпочтительным методом создания данных JSON с использованием .NET?

Мне кажется, я должен использовать веб-сервисы asmx с массивами, преобразованными в json? Но все примеры, которые я видел, находятся на C #.

Ответы [ 5 ]

8 голосов
/ 24 июня 2011

У меня нет VB на моем компьютере, но если вы хотите использовать класс JavaScriptSerializer, ваш проект должен быть нацелен на .NET Framework 3.5 или .NET Framework 4.0 (не на .NET Framework 3.5 Client Profile или .NET Framework 4.0 Client Profile) , Добавьте System.Web.Extensions.dll к ссылкам.

Пример в C #:

public String Index()
{
    Object[] myArray = new Object[3];

    myArray[0] = new { col1 = "foo", col2 = "bar" };
    myArray[1] = new { col1 = "fizz", col2 = "buzz" };
    myArray[2] = new { col1 = "fizz", col2 = "buzz" };

    JavaScriptSerializer serializer = new JavaScriptSerializer();
    return serializer.Serialize(myArray);
}

Выход этой функции:

[{"col1":"foo","col2":"bar"},{"col1":"fizz","col2":"buzz"},{"col1":"fizz","col2":"buzz"}]

Должно быть легко конвертировать его в VB.

Обновление: Версия VB:

Function get_json() As String
    Dim myArray(2) As Object

    myArray(0) = New With {Key .col1 = "foo", .col2 = "bar"}
    myArray(1) = New With {Key .col1 = "fizz", .col2 = "buzz"}
    myArray(2) = New With {Key .col1 = "fizz", .col2 = "buzz"}

    Dim serializer As New JavaScriptSerializer()
    Return serializer.Serialize(myArray)
End Function

Тот же вывод, только не забудьте импортировать System.Web.Script.Serialization.

8 голосов
/ 23 июня 2011

Обычно в ASP.NET не нужно ничего делать для сериализации в JSON.Просто сделайте ваш запрос с правильным типом, верните его правильно, и ASP.NET сериализует для вас JSON.Он также может десериализоваться.

2 голосов
/ 23 июня 2011

Вы можете попробовать Json.NET . Это очень популярная библиотека для обработки объектов json на платформе .net.

0 голосов
/ 24 июня 2011
0 голосов
/ 23 июня 2011

Класс JavaScriptSerializer

Класс JavaScriptSerializer используется внутри уровня асинхронной связи для сериализации и десериализации данных, передаваемых между браузером и веб-сервером.Вы не можете получить доступ к этому экземпляру сериализатора.Однако этот класс предоставляет публичный API.Поэтому вы можете использовать этот класс, когда хотите работать с нотацией объектов JavaScript (JSON) в управляемом коде.

Для сериализации объекта используйте метод Serialize.Чтобы десериализовать строку JSON, используйте методы Deserialize или DeserializeObject.Чтобы сериализовать и десериализовать типы, которые изначально не поддерживаются JavaScriptSerializer, реализуйте пользовательские конвертеры с помощью класса JavaScriptConverter.Затем зарегистрируйте конвертеры с помощью метода RegisterConverters.

...