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

Вы можете использовать метод mget для получения значений нескольких ключей за один вызов (возвращаемых в том же порядке, что и ключи):

data = r.mget(['123', '456'])

Для поиска ключей по определенному шаблону, используйте метод scan:

cursor, keys = r.scan(match='123*')
data = r.mget(keys)

(Документация: https://redis-py.readthedocs.io/en/latest/ )

6
задан Peter Mortensen 1 December 2009 в 17:54
поделиться

8 ответов

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

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

2
ответ дан 17 December 2019 в 00:15
поделиться

Существует большое использование, 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
ответ дан 17 December 2019 в 00:15
поделиться

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

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

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

2
ответ дан 17 December 2019 в 00:15
поделиться

Используйте 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("\"", @"\""") + "\"";
    }
1
ответ дан 17 December 2019 в 00:15
поделиться

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

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

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

1
ответ дан 17 December 2019 в 00:15
поделиться

Это - способ непосредственно ввести объекты JavaScript, доступные во всем Вашем другом клиентском сценарии, с помощью нотации ООП, в веб-страницу, без парсинга или обработки, требуемой на стороне клиента.

0
ответ дан 17 December 2019 в 00:15
поделиться

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

0
ответ дан 17 December 2019 в 00:15
поделиться

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

0
ответ дан 17 December 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: