本人找到一份,可以在asp.net2.0里实现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();

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 = "(\\{[^\\[\\]\\{\\}]+\\})|(\\[[^\\[\\]\\{\\}]+\\])";

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) 

_json = new JSONObject(); 
return _json[Deserialize(text)] as JSONObject; 
}

/// <summary> 
/// 序列化JSONArray对象 
/// </summary> 
/// <param name="text"></param> 
/// <returns></returns> 
public static JSONArray DeserializeArray(string text) 

_json = new JSONObject(); 
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)); 

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])); 

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> 

public new void Add(string key, object value) 

System.Type t = value.GetType();

if (t.Name == "String") 

value = JsonEncode.StrEncodeForDeserialize(value.ToString()); 
}

base.Add(key, value); 

}

/// <summary> 
/// 取出JSON数组类 
/// </summary> 
public class JSONArray : List<object> 

public new void Add(object item) 

System.Type t = item.GetType();

if (t.Name == "String") 

item = JsonEncode.StrEncodeForDeserialize(item.ToString()); 
}

base.Add(item); 

}

/// <summary> 
/// 字符串转义,将"{"、"}"、""" 
/// </summary> 
public class JsonEncode 

public static readonly string _LEFTBRACES = "@leftbraces";//"{"转义符 
public static readonly string _RIGHTBRACES = "@rightbraces";//"}"转义符 
public static readonly string _LEFTBRACKETS = "@leftbrackets";//"["转义符 
public static readonly string _RIGHTBRACKETS = "@rightbrackets";//"]"转义符 
public static readonly string _DOUBLEQUOTATIONMARKS = "@doubleQuotationMarks";//"""转义符

#region 字符串转义 
/// <summary> 
/// 字符串转义,将"{"、"}"、""",分别转换_LEFTBRACES、_RIGHTBRACES、_DOUBLEQUOTATIONMARKS 
/// </summary> 
/// <param name="text"></param> 
/// <returns></returns> 
public static string StrEncodeForDeserialize(string text) 

return text 
.Replace("{", _LEFTBRACES) 
.Replace("}", _RIGHTBRACES) 
.Replace("[", _LEFTBRACKETS) 
.Replace("]", _RIGHTBRACKETS) 
.Replace("\"", _DOUBLEQUOTATIONMARKS); 
}

/// <summary> 
/// 字符串转义,将_LEFTBRACES、_RIGHTBRACES、_DOUBLEQUOTATIONMARKS,分别转换"{"、"}"、""" 
/// </summary> 
/// <param name="text"></param> 
/// <returns></returns> 
public static string StrDecodeForDeserialize(string text) 

return text.Replace(_LEFTBRACES, "{") 
.Replace(_RIGHTBRACES, "}") 
.Replace(_LEFTBRACKETS, "[") 
.Replace(_RIGHTBRACKETS, "]") 
.Replace(_DOUBLEQUOTATIONMARKS, "\""); 

#endregion 
}

最后要说的,就是比较马烦的是,现在要取JSON里的值要用到下面的方法

this.Label2.Text = JsonEncode.StrDecodeForDeserialize(json["domain"].ToString()); 
this.Label2.Text = JsonEncode.StrDecodeForDeserialize(((JSONArray)json["years"])[4].ToString());

asp.net 2.0里也可以用JSON的使用方法的更多相关文章

  1. ASP.NET 4.0尚未在 Web 服务器上注册 解决方法

    使用VS2010创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 Web 服务器配置为使用 ASP.NET 4.0,按 F1 可了 ...

  2. ASP.NET 4.0尚未在 Web 服务器上注册

    ASP.NET 4.0尚未在 Web 服务器上注册 解决方法 使用VS2010创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 W ...

  3. 在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table)

    原文:在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table) 打印指定内容: <html> <head> <script   type= " ...

  4. Asp.net2.0里的SessionPageStatePersister

    备注: ASP.NET 页可在处理和提供任何网页所必需的原本无状态 HTTP 请求与响应之间存储 Page 状态信息.此状态称为“视图状态”. ASP.NET 的默认持久性机制是使用 HiddenFi ...

  5. Log4Net异常日志记录在asp.net mvc3.0的应用

    前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...

  6. Log4Net异常日志记录在asp.net mvc3.0的应用(转载)

    这篇博客写的很好:http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html 前言 log4net是.Net下一个非常优秀的开源 ...

  7. IIS应用程序池添加ASP.NET v4.0

    可能在安装.NET Framewrok 4.0之前,IIS就已经装好了,结果在IIS的应用程序池中只有.NET 2.0的Classic .NET AppPool和DefaultAppPool.在使用v ...

  8. ASP.NET 4.0的ClientIDMode属性

    时光流逝,我们心爱的ASP.NET也步入了4.0的时代,微软在ASP.NET 4.0中对很多特性做了修改.比如我将要讨论的控件ID机制就是其中之一. 在ASP.NET 4.0之前我们总是要为控件的Cl ...

  9. asp.net 2.0中新增的web.config的默认namespace功能 (转)

    看上去这个题目比较长,但实际上,我在看资料时发现,这就是说,在asp.net 2.0中,只需要在web.config里定义你要用的那些namespace,则在aspx页面中就不需要再象1.1那样,用 ...

随机推荐

  1. sqlmapapi的跨域访问Access-Control-Allow-Origin:*;ajax

    1.做sqlmapapi的二次开发时,需要通过ajax方式调用sqlmapapi,但是默认情况下,sqlmapapi是不允许跨域访问的 2.尝试增加ajax的header,修改origin的值,来避免 ...

  2. GLEW扩展库【转】

    http://blog.sina.com.cn/s/blog_4aff14d50100ydsy.html 一.关于GLEW扩展库: GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口.使用O ...

  3. Technique Standard

    http://blog.csdn.net/cnjet/article/details/73433903 jinyaping

  4. shareToQQ,qq 4.1.1 for android,闪退

    用shareToQQ函数分享图文消息,在qq 4.1.1 for android版本下打开联系人列表数秒后会闪退!在更高版本的V4.5.2.1,V4.2.1下则没有这个问题(证明各种设置没问题),各位 ...

  5. 实现一个JDK代理demo

    JDK代理,非常简单地实现了动态代理(首先是实现对应的InvocationHandler:然后,以接口来为被调用目标构建代理对象,代理对象简介运行调用目标,并提供额外逻辑插入) 缺点:它是只能以接口为 ...

  6. IP地址转化为32位无符号数

    转自 http://blog.csdn.net/testcs_dn/article/details/38585719 一.将ip地址转成long数值 将IP地址转化成整数的方法如下: 1.通过Stri ...

  7. Linux 忘记密码怎么办

    Linux 忘记密码解决方法 很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 步骤如 ...

  8. 火狐 http://localhost:8080自动跳转到http://www.localhost.com:8080

    用火狐调试PHP时 偶尔会出现连接被重置的情况:http://localhost:8080自动跳转到http://www.localhost.com:8080 解决方案1: 打开网络-属性,往下拉找到 ...

  9. android-seekbar的thumb图片不居中显示的处理办法

    seekbar更换图片后,发现thumb的图片不会居中(竖直方向)显示了,代码如下: <SeekBar android:id="@+id/wb_seekbar" androi ...

  10. 将python对象序列化成php能读取的格式(即能反序列化到对象)

    转载自:http://my.oschina.net/zuoan001/blog/94914 代码如下: #coding:utf-8 # vim: encoding=utf-8:ft=python:et ...