本人找到一份,可以在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. HBase设计与开发

    HBase设计与开发 @(HBase) 适合HBase应用的场景 成熟的数据分析主题,查询模式已经确定且不会轻易改变. 传统数据库无法承受负载. 简单的查询模式. 基本概念 行健:是hbase表自带的 ...

  2. asp.net购物车,订单以及模拟支付宝支付(二)---订单表

    购物车准备完毕之后,就要着手订单表的设计了 表结构如下: T_Orders T_OrderBooks 为什么这里要分为两个表? 仔细想想,现实生活中的发票 特地去网上找了一张,不是很清晰 但是,正常人 ...

  3. web开发者的博客

    一.  Jerry Qu https://imququ.com/post/sth-about-switch-to-https-2.html 点评:博客做的比较好,样式不错. http知识比较深.

  4. java基础知识汇总4

    三.集合(collection.set.list.map) 一.定义: 集合是Java里面最经常使用的,也是最重要的一部分.可以用好集合和理解好集合对于做Java程序的开发拥有无比的优点. 容器:用来 ...

  5. arm-linux-gdb+gdbserver环境搭建以及远程调试

    0) gdb源码下载:http://ftp.gnu.org/gnu/gdb/ 1) 编译arm-linux-gdb 指定交叉编译工具链的位置 export PATH=$PATH:/usr/local/ ...

  6. openerp所用QWEB2的调试笔记

    [1] 调式qweb模板时, 可以脱离openerp环境 阅读一下openerp目录 qweb目录中的几个html文件,可以作为起步 在浏览器下, 可以这样运行这些文件 http://127.0.0. ...

  7. 读写锁pthread_rwlock_t的使用(转)

    读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排他的,读可以有多个在读,写只有唯一个在写,同时写的时候不允许读. 具有强读者同步和强写者同步两种形式 强读者同步:当写者没有进行写操作,读者就 ...

  8. WP8滑动条(Slider)控件的使用

    1. <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinit ...

  9. PHP正则表达式教程

    1.入门简介  在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过Windo ...

  10. 基于RocketIO的高速串行协议设计与实现

    随着对信息流量需求的不断增长, 传统并行接口技术成为进一步提高数据传输速率的瓶颈.过去主要用于光纤通信的串行通信技术—SERDES正在取代传统并行总线而成为高速接口技术的主流.SERDES 是串行器) ...