Почему я должен использовать JSON с ASP.NET? - PullRequest
6 голосов
/ 15 января 2009

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

Ответы [ 9 ]

2 голосов
/ 15 января 2009

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

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

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

2 голосов
/ 15 января 2009

Как насчет того, когда возвращает данные из веб-службы ? Вот два метода, которые подходят для .Net 2.0, которые принимают параметр DataTable или DataRow и возвращают отформатированную строку 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() + "]";
}

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

1 голос
/ 15 января 2009

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

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

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

1 голос
/ 15 января 2009

Существует множество применений, 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

}
1 голос
/ 15 января 2009

Используйте 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("\"", @"\""") + "\"";
    }
0 голосов
/ 24 ноября 2011

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

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

0 голосов
/ 15 января 2009

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

.
0 голосов
/ 15 января 2009

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

0 голосов
/ 15 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...