我为什么要在ASP.NET中使用JSON?

时间:2009-01-15 14:20:37

标签: asp.net json

为什么我要在ASP.NET中使用JSON?你能举一个实际的例子吗?我读过文章但不太好。

9 个答案:

答案 0 :(得分:2)

从Web服务返回数据时怎么样? 以下是适用于.Net 2.0的两种方法,它们采用DataTable或DataRow参数,并从Web服务返回要发送到客户端的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 :(得分:2)

JSON适用于添加Ajax功能。例如,您可以使用返回JSON对象的Ajax请求返回的某些值填充ComboBox的内容。

ASP.NET Ajax在内部使用JSON。如果你正在使用另一个框架,比如jQuery,你自己同时做客户端和服务器端。

JSON很容易被人和计算机阅读,并且引入的开销很小。 JavaScript客户端代码可以原生解析JSON。

答案 2 :(得分:1)

使用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("\"", @"\""") + "\"";
    }

答案 3 :(得分:1)

有很多用途,API,Web服务,它的开销比XML少得多。作为实际示例,您可以使用带有几行代码的JSON数据填充ExtJs树或网格。

如果您正在使用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

}

答案 4 :(得分:1)

返回JSON对象的Ajax调用可以简单地转换为JavaScript对象,例如。

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

这使得将复杂数据传递到客户端非常方便,而无需进行自定义表示或使用XML / XSLT。

答案 5 :(得分:0)

JSON比XML更容易解析,并且有很多选项可以这样做。

答案 6 :(得分:0)

这是一种直接注入javascript对象的方法,可以在所有其他客户端脚本中使用OOP表示法访问您的网页,而无需在客户端进行解析或处理。

答案 7 :(得分:0)

你有什么选择? XML比JSON重,因此它使用更多带宽(但对于验证和转换数据非常有用), YAML需要缩进和换行,使其成为通过Http发送的次优格式(但适用于存储日志,数据和配置)。 JSON是原生的javascript,很轻,所以它在客户端很棒,并且通过Http进行传输

答案 8 :(得分:0)

这是一篇非常好的文章,说明为什么JSON是发送和接收数据的首选方法。

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