当前位置:编程学习 > C#/ASP.NET >>

ASP.NET 如何操作使用JSON对象!

ASP.NET 如何操作使用JSON对象!
创建,读取JSON对象!给个简单例子,谢谢了! --------------------编程问答-------------------- ashx生成一下script脚本

客户端用xmlhttp就成


或者你直接用ajaxpro就直接支持... --------------------编程问答-------------------- 后台怎么操作,不用js操作 --------------------编程问答-------------------- ?动态生成脚本就是了...后台,这个有啥难的.... --------------------编程问答-------------------- 有某种东西叫百度,够够 --------------------编程问答-------------------- http://www.json.org/

去找找 .Net 的东西. --------------------编程问答--------------------
将 JSON 数据赋值给变量 
例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它: 
var people =  { "programmers": [    { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },    { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },    { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }   ],  "authors": [    { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },    { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },    { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }   ],  "musicians": [    { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },    { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }   ]  }
这非常简单;现在 people 包含前面看到的 JSON 格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。 
访问数据 
尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进 JavaScript 变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面这样的代码: 
people.programmers[0].lastName;
注意,数组索引是从零开始的。所以,这行代码首先访问 people 变量中的数据;然后移动到称为 programmers 的条目,再移动到第一个记录([0]);
最后,访问 lastName 键的值。结果是字符串值 “McLaughlin”。 
下面是使用同一变量的几个示例。 
people.authors[1].genre // Value is "fantasy"
people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn't one
people.programmers.[2].firstName // Value is "Elliotte"
利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。 
修改 JSON 数据 
正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据: 
people.musicians[1].lastName = "Rachmaninov"; 
转换回字符串 
当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在 JavaScript 中这种转换也很简单: 
String newJSONtext = people.toJSONString();
这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。 
这就是 JSON 与本系列讨论的其他数据格式之间最大的差异。如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用 Document Object Model 这样的 API(提供了将自己的数据结构转换为文本的函数),也需要学习这个 API 并使用 API 的对象,而不是使用原生的 JavaScript 对象和语法。 
最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。 --------------------编程问答-------------------- http://www.cnblogs.com/hunts/archive/2006/11/20/566694.aspx --------------------编程问答-------------------- 每天回帖即可获得10分可用分!小技巧 --------------------编程问答--------------------
将   JSON   数据赋值给变量   
例如,可以创建一个新的   JavaScript   变量,然后将   JSON   格式的数据字符串直接赋值给它:   
var   people   =     {   "programmers ":   [         {   "firstName ":   "Brett ",   "lastName ": "McLaughlin ",   "email ":   "brett@newInstance.com "   },         {   "firstName ":   "Jason ",   "lastName ": "Hunter ",   "email ":   "jason@servlets.com "   },         {   "firstName ":   "Elliotte ",   "lastName ": "Harold ",   "email ":   "elharo@macfaq.com "   }       ],     "authors ":   [         {   "firstName ":   "Isaac ",   "lastName ":   "Asimov ",   "genre ":   "science   fiction "   },         {   "firstName ":   "Tad ",   "lastName ":   "Williams ",   "genre ":   "fantasy "   },         {   "firstName ":   "Frank ",   "lastName ":   "Peretti ",   "genre ":   "christian   fiction "   }       ],     "musicians ":   [         {   "firstName ":   "Eric ",   "lastName ":   "Clapton ",   "instrument ":   "guitar "   },         {   "firstName ":   "Sergei ",   "lastName ":   "Rachmaninoff ",   "instrument ":   "piano "   }       ]     } 
这非常简单;现在   people   包含前面看到的   JSON   格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。   
访问数据   
尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进   JavaScript   变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问   programmers   列表的第一个条目的姓氏,只需在   JavaScript   中使用下面这样的代码:   
people.programmers[0].lastName; 
注意,数组索引是从零开始的。所以,这行代码首先访问   people   变量中的数据;然后移动到称为   programmers   的条目,再移动到第一个记录([0]); 
最后,访问   lastName   键的值。结果是字符串值   “McLaughlin”。   
下面是使用同一变量的几个示例。   
people.authors[1].genre   //   Value   is   "fantasy " 
people.musicians[3].lastName   //   Undefined.   This   refers   to   the   fourth   entry,   and   there   isn 't   one 
people.programmers.[2].firstName   //   Value   is   "Elliotte " 
利用这样的语法,可以处理任何   JSON   格式的数据,而不需要使用任何额外的   JavaScript   工具包或   API。   
修改   JSON   数据   
正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据:   
people.musicians[1].lastName   =   "Rachmaninov ";   
转换回字符串   
当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在   JavaScript   中这种转换也很简单:   
String   newJSONtext   =   people.toJSONString(); 
这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作   Ajax   应用程序中的请求字符串。   
这就是   JSON   与本系列讨论的其他数据格式之间最大的差异。如果使用   JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用   Document   Object   Model   这样的   API(提供了将自己的数据结构转换为文本的函数),也需要学习这个   API   并使用   API   的对象,而不是使用原生的   JavaScript   对象和语法。   
最终结论是,如果要处理大量   JavaScript   对象,那么   JSON   几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。 --------------------编程问答-------------------- JavaScript处理json例:function aa(){var a={"city":"beijing","street":"chaoyang","postcode":"100025"}; 

document.write(a.city) //若value为另外的Object则:document.write(a.ObjectKey.Property)} --------------------编程问答-------------------- 每天回帖即可获得10分可用分!小技巧 --------------------编程问答-------------------- 通过ajax提交的json数据 .net后台如何获取 --------------------编程问答-------------------- 解析json字符串咯!解析源码应该有开源的,楼主可以找找,只是我的无法给你。 --------------------编程问答-------------------- 学习了 --------------------编程问答--------------------
引用 10 楼 g316259084 的回复:
JavaScript处理json例:function aa(){var a={"city":"beijing","street":"chaoyang","postcode":"100025"}; 

document.write(a.city) //若value为另外的Object则:document.write(a.ObjectKey.Property)}

+1 --------------------编程问答-------------------- 学习了 ··········· --------------------编程问答-------------------- 版本不同方式,好象现象3.5,4.0都很方便了,我还停留在恐龙出没的2.0时代,这个版本用webservice非常麻烦。

记得当前有帖子说过给你找到了,当然首先要装ajax插件。

http://topic.csdn.net/u/20090303/22/bb2e69a3-d397-4f6e-9508-c611f2d128f1.html --------------------编程问答-------------------- up。每天回帖即可获得10分可用分! --------------------编程问答-------------------- 这些搞编程的,真是呆子
楼主一再强调要在服务器端处理JSON,
大家仍一个接一个地大谈javascript如何处理JSON.

有人弄了专门的组件,方便后台处理JSON
譬如Json.NET   LitJSON

当然, asp.net也提供专门的类JavaScriptSerializer 转换JSON数据.
若要序列化对象,请使用 Serialize 方法。 若要反序列化 JSON 字符串,请使用 Deserialize 或 DeserializeObject 方法。
譬如
Customer cust = jsSerializer.Deserialize(JOSN_STR);

--------------------编程问答-------------------- http://www.json.org/ 
--------------------编程问答--------------------
引用 19 楼 newdigitime 的回复:
这些搞编程的,真是呆子
楼主一再强调要在服务器端处理JSON,
大家仍一个接一个地大谈javascript如何处理JSON.

有人弄了专门的组件,方便后台处理JSON
譬如Json.NET LitJSON

当然, asp.net也提供专门的类JavaScriptSerializer 转换JSON数据.
若要序列化对象,请使用 Serialize 方法。 若要反序列化 JSON ……


擦,为什么要问服务端,不是有现成的类么。真是奇了个怪哉。 --------------------编程问答-------------------- 学习、、、、、、、、、、、、 --------------------编程问答-------------------- 给你一个类


/// <summary>
    /// JSON解析类
    /// </summary>
    public static class JSONConvert
    {
        #region 全局变量

        private static JSONObject _json = new JSONObject();//寄存器

        private static readonly string _SEMICOLON = "@semicolon";//分号转义符

        private static readonly string _COMMA = "@comma"; //逗号转义符


        #endregion

        #region 字符串转义

        /// <summary>
        /// 字符串转义,将双引号内的:和,分别转成_SEMICOLON和_COMMA
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        private static string StrEncode(string text)
        {
            MatchCollection matches = Regex.Matches(text, "\\\"[^\\\"]+\\\"");
            foreach (Match match in matches)
            {
                text = text.Replace(match.Value, match.Value.Replace(":", _SEMICOLON).Replace(",", _COMMA));
            }

            return text;
        }

        /// <summary>
        /// 字符串转义,将_SEMICOLON和_COMMA分别转成:和,
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        private static string StrDecode(string text)
        {
            return text.Replace(_SEMICOLON, ":").Replace(_COMMA, ",");
        }

        #endregion

        #region JSON最小单元解析


        /// <summary>
        /// 最小对象转为JSONObject
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        private static JSONObject DeserializeSingletonObject(string text)
        {
            JSONObject jsonObject = new JSONObject();

            MatchCollection matches = Regex.Matches(text, "(\\\"(?<key>[^\\\"]+)\\\":\\\"(?<value>[^,\\\"]+)\\\")|(\\\"(?<key>[^\\\"]+)\\\":(?<value>[^,\\\"\\}]+))");
            foreach (Match match in matches)
            {
                string value = match.Groups["value"].Value;
                jsonObject.Add(match.Groups["key"].Value, _json.ContainsKey(value) ? _json[value] : StrDecode(value));
            }

            return jsonObject;
        }

        /// <summary>
        /// 最小数组转为JSONArray
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        private static JSONArray DeserializeSingletonArray(string text)
        {
            JSONArray jsonArray = new JSONArray();
            jsonArray.Clear();
            MatchCollection matches = Regex.Matches(text, "(\\\"(?<value>[^,\\\"]+)\")|(?<value>[^,\\[\\]]+)");
            foreach (Match match in matches)
            {
                string value = match.Groups["value"].Value;
                jsonArray.Add(_json.ContainsKey(value) ? _json[value] : StrDecode(value));
            }

            return jsonArray;
        }

        /// <summary>
        /// 反序列化
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        private static string Deserialize(string text)
        {
            text = StrEncode(text);//转义;和,

            int count = 0;
            string key = string.Empty;
            string pattern = "(\\{[^\\[\\]\\{\\}]+\\})|(\\[[^\\[\\]\\{\\}]+\\])";
            _json.Clear();
            while (Regex.IsMatch(text, pattern))
            {
                MatchCollection matches = Regex.Matches(text, pattern);
                foreach (Match match in matches)
                {
                    key = "___key" + count + "___";

                    if (match.Value.Substring(0, 1) == "{")
                        _json.Add(key, DeserializeSingletonObject(match.Value));
                    else
                        _json.Add(key, DeserializeSingletonArray(match.Value));

                    text = text.Replace(match.Value, key);

                    count++;
                }
            }
            return text;
        }

        #endregion

        #region 公共接口

        /// <summary>
        /// 序列化JSONObject对象
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static JSONObject DeserializeObject(string text)
        {
            return _json[Deserialize(text)] as JSONObject;
        }

        /// <summary>
        /// 序列化JSONArray对象
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static JSONArray DeserializeArray(string text)
        {
            return _json[Deserialize(text)] as JSONArray;
        }

        /// <summary>
        /// 反序列化JSONObject对象
        /// </summary>
        /// <param name="jsonObject"></param>
        /// <returns></returns>
        public static string SerializeObject(JSONObject jsonObject)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("{");
            foreach (KeyValuePair<string, object> kvp in jsonObject)
            {
                if (kvp.Value is JSONObject)
                {
                    sb.Append(string.Format("\"{0}\":{1},", kvp.Key, SerializeObject((JSONObject)kvp.Value)));
                }
                else if (kvp.Value is JSONArray)
                {
                    sb.Append(string.Format("\"{0}\":{1},", kvp.Key, SerializeArray((JSONArray)kvp.Value)));
                }
                else if (kvp.Value is String)
                {
                    //双引号转义
                    //sb.Append(string.Format("\"{0}\":\"{1}\",", kvp.Key, kvp.Value));
                    sb.Append(string.Format("\"{0}\":\"{1}\",", kvp.Key, WK.Util.UString.Replace(kvp.Value.ToString(), "\"", "\\\"")));
                }
                else if (kvp.Value is Int32 || kvp.Value is Int16 || kvp.Value is Int64)
                {
                    sb.Append(string.Format("\"{0}\":\"{1}\",", kvp.Key, kvp.Value));
                }
                else
                {
                    sb.Append(string.Format("\"{0}\":\"{1}\",", kvp.Key, ""));
                }
            }
            if (sb.Length > 1)
                sb.Remove(sb.Length - 1, 1);
            sb.Append("}");
            return sb.ToString();
        }

        /// <summary>
        /// 反序列化JSONArray对象
        /// </summary>
        /// <param name="jsonArray"></param>
        /// <returns></returns>
        public static string SerializeArray(JSONArray jsonArray)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("[");
            for (int i = 0; i < jsonArray.Count; i++)
            {
                if (jsonArray[i] is JSONObject)
                {
                    sb.Append(string.Format("{0},", SerializeObject((JSONObject)jsonArray[i])));
                }
                else if (jsonArray[i] is JSONArray)
                {
                    sb.Append(string.Format("{0},", SerializeArray((JSONArray)jsonArray[i])));
                }
                else if (jsonArray[i] is String)
                {
                    //双引号转义
                    //sb.Append(string.Format("\"{0}\",", jsonArray[i]));
                    sb.Append(string.Format("\"{0}\",", WK.Util.UString.Replace(jsonArray[i].ToString(), "\"", "\\\"")));
                }
                else
                {
                    sb.Append(string.Format("\"{0}\",", ""));
                }

            }
            if (sb.Length > 1)
                sb.Remove(sb.Length - 1, 1);
            sb.Append("]");
            return sb.ToString();
        }
        #endregion
    }

    /// <summary>
    ///JSON对象类
    /// </summary>
    public class JSONObject : Dictionary<string, object>
    {
    }

    /// <summary>
    ///JSON数组类
    /// </summary>
    public class JSONArray : List<object>
    { }
--------------------编程问答-------------------- 生成json:
arrySearch = "[ ";
            if (ds.Tables[0].Rows.Count>0) {
                int i = 1;
                foreach (DataRow dr in ds.Tables[0].Rows) {
                    if (i == ds.Tables[0].Rows.Count)
                    {
                        arrySearch += "{name:'" + ("" + dr["user_name"] + "',py:'" + ChineseManager.MakeSpellCode("" + dr["user_name"], 6)) + "',category:'" + dr["tname"] + "'}";
                    }
                    else {
                        arrySearch += "{name:'" + ("" + dr["user_name"] + "',py:'" + ChineseManager.MakeSpellCode("" + dr["user_name"], 6)) + "',category:'" + dr["tname"] + "'},";
                    }
                    i++;
                }
            }
            arrySearch += "]";


js里获取json:

var companyData=<%=arrySearch %>//这个是我后台定义变量接收生成的json
for(var i=0;i<companyData.length;i++){
                if($("#guid").val()!=companyData[i].guid){
                    temp+="<div class='dropItem'><a class='DropCondition' href='javascript:getDept(\""+companyData[i].guid+"\")'>"+companyData[i].companyname+"</a></div>";
                }else{
                    $("#div1").append("<a class='DropCondition' href='javascript:getDept(\""+companyData[i].guid+"\")'>"+companyData[i].companyname+"<small>▼</small></a>");
                }
            }

后台获取接收json格式的数组
using (var reader = new JsonTextReader(new StringReader(json)))
                {
                    var colname = "";
                    var sort = "";
                    var sortindex = "";
                    while (reader.Read())
                    {
                        if (reader.TokenClass == JsonTokenClass.Member)
                        {
                            var text = reader.Text;
                            switch (text)
                            {
                                case "colname":
                                    reader.ReadMember();
                                    colname = "" + reader.Text;
                                    break;
                                case "sortby":
                                    reader.ReadMember();
                                    sort = "" + reader.Text;
                                    break;
                                case "sortindex":
                                    reader.ReadMember();
                                    sortindex = "" + reader.Text;
                                    sSql = "update T_USERGRIDSTYLE set sort='" + sort + "' ,sortindex=" + sortindex +
                                           " where colname='" + colname + "' and grid_id='" + grid + "' and user_id=" +
                                           SessionUtil.UserID;
                                    OracleHelper.ExecuteNonQuery(trn, CommandType.Text, sSql);
                                    break;
                            }
                        }
                    }

                }
--------------------编程问答--------------------
引用楼主 hy86458 的回复:
ASP.NET   如何操作使用JSON对象!
创建,读取JSON对象!给个简单例子,谢谢了!

前面的用JS搞,后面就不知道了.
--------------------编程问答-------------------- 后台用数据库独处的数据格式化成Json格式  我看了网上好多例子  还在实验中~http://www.aspxcs.net/HTML/0947512439.html

仅供参考! --------------------编程问答-------------------- json序列化 反序列化
2007年的帖子了 估计也不会结了! --------------------编程问答-------------------- http://www.cnblogs.com/chenping-987123/archive/2011/02/14/1954640.html --------------------编程问答-------------------- 07年的帖子也会跑上面来,。,, --------------------编程问答--------------------
引用 27 楼 huangwenquan123 的回复:
json序列化 反序列化
2007年的帖子了 估计也不会结了!


+1 --------------------编程问答-------------------- 我来结婚! --------------------编程问答-------------------- 每天回帖即可获得10分可用分!小技巧 --------------------编程问答-------------------- 用datatable生成 json格式, --------------------编程问答-------------------- 有现成的类库的,百度吧 --------------------编程问答--------------------
引用 7 楼 luqinghua 的回复:
http://www.cnblogs.com/hunts/archive/2006/11/20/566694.aspx


这是什么? --------------------编程问答-------------------- ding  up --------------------编程问答-------------------- http://www.cnria.net/articles/asp.net/asp.net-silverlight-json-to-object.html
这里已经有最完整的例子,后面有源码下载,直接运行就OK了 --------------------编程问答-------------------- 困,路过 --------------------编程问答-------------------- 去下JSON。net算了。。。 --------------------编程问答-------------------- 就和获得Session一样啊。Request.QueryString[""];
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,