Почему я должен использовать JSON с ASP.NET?

Почему я должен использовать JSON с ASP.NET? Можете привести практический пример? Я читал статьи, но не очень.

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
4 933
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

JSON анализировать намного проще, чем XML, и для этого существует множество вариантов.

Ответ принят как подходящий

А когда возврат данных из веб-службы? Вот два метода, которые подходят для .Net 2.0, которые принимают DataTable или DataRow Parameter и возвращают отформатированную строку JSON для отправки клиенту из веб-службы:

public string GetJson(DataRow r)
    {
        int index = 0;
        StringBuilder json = new StringBuilder();
        foreach (DataColumn item in r.Table.Columns)
        {
            json.Append(String.Format("\"{0}\" : \"{1}\"", item.ColumnName, r[item.ColumnName].ToString().Replace("\"","\\\"")));
            if (index < r.Table.Columns.Count - 1)
            {
                json.Append(", ");
            }
            index++;
        }
        return "{" + json.ToString() + "}";
    }

public string GetJson(DataTable t)
{
    int index = 0;
    StringBuilder json = new StringBuilder();
    foreach (DataRow currRow in t.Rows)
    {
        json.Append(GetJson(currRow));
        if (index < t.Rows.Count - 1)
        {
            json.Append(", ");
        }
    }
    return "[" + json.ToString() + "]";
}

Затем результат можно отправить и оценить на клиенте.

Вам просто нужно увеличить свой индекс в методе данных

davidsleeps 25.01.2011 03:11

JSON хорош для добавления функциональности Аякс. Например, вы можете заполнить содержимое ComboBox некоторыми значениями, возвращаемыми запросом Ajax, возвращающим объект JSON.

ASP.NET Ajax внутренне использует JSON. Если вы используете другой фреймворк, например jQuery, вы сами выполняете как клиентскую, так и серверную сторону.

JSON легко читается как людьми, так и компьютерами и требует небольших накладных расходов. Клиентский код JavaScript может изначально анализировать JSON.

Это способ напрямую внедрить объекты javascript, доступные во всех ваших других сценариях на стороне клиента, с использованием нотации ООП, на вашу веб-страницу, без необходимости синтаксического анализа или обработки на стороне клиента.

Используйте JSON, потому что его очень легко анализировать в браузере - просто позвоните eval(), и все готово.

Пока мы делимся DataTable с реализациями JSON:

    public static string DataTableToJSON(DataTable dt)
    {
        string rowDelimiter = "";

        StringBuilder result = new StringBuilder("[");
        foreach (DataRow row in dt.Rows)
        {
            result.Append(rowDelimiter);
            result.Append(DataRowToJSON(row));
            rowDelimiter = ",";
        }
        result.Append("]");

        return result.ToString();
    }

    public static string DataRowToJSON(DataRow row)
    {
        DataColumnCollection cols = row.Table.Columns;
        string colDelimiter = "";

        StringBuilder result = new StringBuilder("{");       
        for (int i = 0; i < cols.Count; i++)
        { // use index rather than foreach, so we can use the index for both the row and cols collection
            result.AppendFormat("{0}\"{1}\":{2}",
                    colDelimiter, cols[i].ColumnName,
                    PrepJSONValue(row[i], cols[i].DataType));

            colDelimiter = ",";
        }
        result.Append("}");
        return result.ToString();
    }

    // possible types:
    // http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype(VS.80).aspx
    private static Type[] numeric = new Type[] {typeof(byte), typeof(decimal), typeof(double), 
                                     typeof(Int16), typeof(Int32), typeof(SByte), typeof(Single),
                                     typeof(UInt16), typeof(UInt32), typeof(UInt64)};

    private static long EpochTicks = new DateTime(1970, 1, 1).Ticks;

    private static string PrepJSONValue(object value, Type DataType)
    {
        // null
        if (value == DBNull.Value) return "null";

        // numeric
        if (Array.IndexOf(numeric, DataType) > -1)
            return value.ToString(); // TODO: eventually want to use a stricter format

        // boolean
        if (DataType == typeof(bool))
            return ((bool)value) ? "true" : "false";

        // date -- see http://weblogs.asp.net/bleroy/archive/2008/01/18/dates-and-json.aspx
        if (DataType == typeof(DateTime))       
            return "\"\/Date(" + new TimeSpan(((DateTime)value).ToUniversalTime().Ticks - EpochTicks).TotalMilliseconds.ToString() + ")\/\"";

        // TODO: add Timespan support
        // TODO: add Byte[] support

        // string/char
        return "\"" + value.ToString().Replace(@"\", @"\\").Replace(Environment.NewLine, @"\n").Replace("\"", @"\""") + "\"";
    }

Вместо eval () всегда лучше использовать библиотеку Крокфорда: json.org/js.html

Andreas Grech 15.01.2009 17:38

Какие у вас есть альтернативы? XML тяжелее JSON, поэтому он использует большую пропускную способность (но эффективен для проверки и преобразования данных), YAML требует отступов и новых строк, что делает его неоптимальным форматом для отправки по Http (но подходит для хранения журналов, данных и конфигураций). JSON - это собственный javascript и легкий, поэтому он отлично подходит на стороне клиента и для передачи по Http.

Существует множество применений, API, веб-сервисов, и у него гораздо меньше накладных расходов, чем у XML. В качестве практического примера вы можете заполнить дерево или сетку ExtJs, используя данные JSON, с помощью нескольких строк кода.

Если вы используете ASP.NET MVC, очень легко вернуть JSON из контроллера, примерно так:

// this method return JSON directly
public JsonResult GetData() {

    data = LoadData(); // load the data from a database or a service
    return Json(data); // will serialize your data object as JSON

}

Вызов Ajax, который возвращает объект JSON, можно тривиально преобразовать в объект JavaScript, например.

var jsObject = eval( "(" + ajaxCallReturningJson(whatever) + ")" );

Это делает его очень удобным для передачи сложных данных клиенту без необходимости создавать собственное представление или дурачиться с XML / XSLT.

Вот очень хорошая статья о том, почему JSON является предпочтительным методом отправки и получения данных.

http://robtiffany.com/windows-phone-7/windows-phone-7-line-of-business-app-dev-building-a-wcf-rest-json-service

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