ASP.NET JSON(转http://www.360doc.com/content/14/0615/21/18155648_386887590.shtml)
概念介绍
还是先简单说说Json的一些例子吧。注意,以下概念是我自己定义的,可以参考.net里面的TYPE的模型设计
如果有争议,欢迎提出来探讨!
1.最简单:
{"total":0}
total就是值,值是数值,等于0
2. 复杂点
{"total":0,"data":{"377149574" : 1}}
total是值,data是对象,这个对象包含了"377149574"这个值,等于1
3. 最复杂
{"total":0,"data":{"377149574":[{"cid":"377149574"}]}}
total是值,data是对象,377149574是数组,这个数组包含了一些列的对象,例如{"cid":"377149574"}这个对象。
有了以上的概念,就可以设计出通用的json模型了。
万能JSON源码:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pixysoft.Json
{
public class CommonJsonModelAnalyzer
{
protected string _GetKey(string rawjson)
{
if (string.IsNullOrEmpty(rawjson))
return rawjson;
rawjson = rawjson.Trim();
string[] jsons = rawjson.Split(new char[] { ':' });
if (jsons.Length < 2)
return rawjson;
return jsons[0].Replace("\"", "").Trim();
}
protected string _GetValue(string rawjson)
{
if (string.IsNullOrEmpty(rawjson))
return rawjson;
rawjson = rawjson.Trim();
string[] jsons = rawjson.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
if (jsons.Length < 2)
return rawjson;
StringBuilder builder = new StringBuilder();
for (int i = 1; i < jsons.Length; i++)
{
builder.Append(jsons[i]);
builder.Append(":");
}
if (builder.Length > 0)
builder.Remove(builder.Length - 1, 1);
string value = builder.ToString();
if (value.StartsWith("\""))
value = value.Substring(1);
if (value.EndsWith("\""))
value = value.Substring(0, value.Length - 1);
return value;
}
protected List<string> _GetCollection(string rawjson)
{
//[{},{}]
List<string> list = new List<string>();
if (string.IsNullOrEmpty(rawjson))
return list;
rawjson = rawjson.Trim();
StringBuilder builder = new StringBuilder();
int nestlevel = -1;
int mnestlevel = -1;
for (int i = 0; i < rawjson.Length; i++)
{
if (i == 0)
continue;
else if (i == rawjson.Length - 1)
continue;
char jsonchar = rawjson[i];
if (jsonchar == '{')
{
nestlevel++;
}
if (jsonchar == '}')
{
nestlevel--;
}
if (jsonchar == '[')
{
mnestlevel++;
}
if (jsonchar == ']')
{
mnestlevel--;
}
if (jsonchar == ',' && nestlevel == -1 && mnestlevel == -1)
{
list.Add(builder.ToString());
builder = new StringBuilder();
}
else
{
builder.Append(jsonchar);
}
}
if (builder.Length > 0)
list.Add(builder.ToString());
return list;
}
}
}
using System; namespace Pixysoft.Json private bool isValue = false; private bool isModel = false; private bool isCollection = false; internal CommonJsonModel(string rawjson) if (string.IsNullOrEmpty(rawjson)) rawjson = rawjson.Trim(); if (rawjson.StartsWith("{")) public string Rawjson public bool IsValue() if (string.IsNullOrEmpty(key)) foreach (string subjson in base._GetCollection(this.rawjson)) if (!model.IsValue()) if (model.Key == key) return submodel.IsValue(); return false; if (string.IsNullOrEmpty(key)) foreach (string subjson in base._GetCollection(this.rawjson)) if (!model.IsValue()) if (model.Key == key) return submodel.IsModel(); return false; if (string.IsNullOrEmpty(key)) foreach (string subjson in base._GetCollection(this.rawjson)) if (!model.IsValue()) if (model.Key == key) return submodel.IsCollection(); return false; /// <summary> List<string> list = new List<string>(); foreach (string subjson in base._GetCollection(this.rawjson)) if (!string.IsNullOrEmpty(key)) return list; /// <summary> if (string.IsNullOrEmpty(key)) foreach (string subjson in base._GetCollection(this.rawjson)) if (!model.IsValue()) if (model.Key == key) return null; /// <summary> if (string.IsNullOrEmpty(key)) foreach (string subjson in base._GetCollection(this.rawjson)) if (!model.IsValue()) if (model.Key == key) if (!submodel.IsModel()) return null; /// <summary> if (string.IsNullOrEmpty(key)) foreach (string subjson in base._GetCollection(this.rawjson)) if (!model.IsValue()) if (model.Key == key) if (!submodel.IsCollection()) return null; /// <summary> if (IsValue()) foreach (string subjson in base._GetCollection(rawjson)) return list; /// <summary> return null; return base._GetValue(rawjson);
|
ASP.NET JSON(转http://www.360doc.com/content/14/0615/21/18155648_386887590.shtml)的更多相关文章
- http://www.360doc.com/content/14/0313/17/16070877_360315087.shtml
http://www.360doc.com/content/14/0313/17/16070877_360315087.shtml
- http://www.360doc.com/content/13/0516/22/12094763_285956121.shtml
http://www.360doc.com/content/13/0516/22/12094763_285956121.shtml
- http://www.360doc.com/content/12/1014/00/7471983_241330790.shtml
http://www.360doc.com/content/12/1014/00/7471983_241330790.shtml
- http://www.360doc.com/content/10/1012/09/3722251_60285817.shtml
http://www.360doc.com/content/10/1012/09/3722251_60285817.shtml http://www.docin.com/p-163063250.htm ...
- http://www.360doc.com/content/18/0406/16/15102180_743316618.shtml
http://www.360doc.com/content/18/0406/16/15102180_743316618.shtml
- System.Thread.TImer控件——http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml
http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml
- http://www.360doc.com/content/10/0928/12/11991_57014502.shtml
http://www.360doc.com/content/10/0928/12/11991_57014502.shtml
- C++中的memset()函数 ------------转自:http://www.360doc.com/content/10/1006/18/1704901_58866679.shtml
memset()函数可以对大内存的分配进行很方便的操作(初始化),所谓“初始化”,当然是指将你定义的变量或申请的空间赋予你所期望的值,例如语句int i=0;就表明定义了一个变量i,并初始化为0:如果 ...
- Maven运行JUnit测试(http://www.360doc.com/content/13/0927/15/7304817_317455642.shtml)
Maven单元测试 分类: maven 2012-05-09 15:17 1986人阅读 评论(1) 收藏 举报 maven测试junit单元测试javarandom 目录(?)[-] maven ...
随机推荐
- [skill] mmap / fwrite / write linux磁盘读写的分层结构
转自:http://www.cnblogs.com/zhaoyl/p/5901680.html 看完此文,题目不言自明.转自 http://blog.chinaunix.net/uid-2710571 ...
- Delphi2010分 AnsiChar(1个字节) 和WideChar(2个字节) 。D7都是AnsiChar。
Delphi2010分 AnsiChar(1个字节) 和WideChar(2个字节) .D7都是AnsiChar.
- Maven项目常见的小问题
pom.xml文件头报错 场景 例Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4 from ...
- 主动触发input框的失去焦点事件,阻止输入法跳出
今天遇到个问题,我在手机做一个选择生日的功能,但是当我点击input框时,事件选择插件和输入法都弹出来了,很丑,然后就想阻止输入法弹出来, 网上一个方法是:在input框的获取焦点事件里,主动触发失去 ...
- java 随机抽取案例,不重复抽取
以学生类为例,先准备一个Student类 package cn.sasa.demo1; public class Student { private int id; private String na ...
- 洛谷P5234 越狱老虎桥 [JSOI2012] tarjan
正解:tarjan+贪心(?并不会总结是什么方法QAQ,,, 解题报告: 传送门! 这题是真的题意杀,,,我我我要不是之前知道题目大意了我怕是怎么看都看不懂这是个什么意思昂QAQ 所以先说下题目大意好 ...
- 【Python爬虫】Requests库的基本使用
Requests库的基本使用 阅读目录 基本的GET请求 带参数的GET请求 解析Json 获取二进制数据 添加headers 基本的POST请求 response属性 文件上传 获取cookie 会 ...
- (4.1)mysql备份还原——mysql常见故障
(4.1)mysql备份还原——mysql常见故障 1.常见故障类型 在数据库环境中,常见故障类型: 语句失败,用户进程失败,用户错误 实例失败,介质故障,网络故障 其中最严重的故障主要是用户错误和介 ...
- Linux ethtool 命令
ethtool 是用于查询及设置网卡参数的命令,常见用法如下: 注意:该命令只是临时设置,如果网卡重启就失效了,如果想要永久保存应该配置 /etc/sysconfig/network-scripts/ ...
- what's the 场外交易
出自 MBA智库百科(https://wiki.mbalib.com/) 什么是场外交易 场外交易是指证券投资机构之间不通过股票交易所,而以电话.电传等方式相互进行的股票交易. ...