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 ...
随机推荐
- Kafka – kafka consumer
ConsumerRecords<String, String> records = consumer.poll(100); /** * Fetch data for the topic ...
- 添加图片后xcode报错:resource fork, Finder information, or similar detritus not allowed
/Users/songximing/Library/Developer/Xcode/DerivedData/Children-cvqgzlzddltkfndhdmzedxbnoxwx/Build/Pr ...
- oracle 监听报错the information provided for this listener is currently in use by other software on this computer
use another port number: the information provided for this listener is currently in use by other sof ...
- GIt如何进行代码管理
一:Git账号设置(仅第一次需设置): 1.首先打开GIt Bash 界面
- 洛谷P2329 栅栏 [SCOI2005] 搜索
正解:搜索 解题报告: 先放下传送门! 首先说下爆搜趴,就直接枚每个需求是否被满足以及如果满足切哪个板子,随便加个最优性剪枝,似乎是有80pts 然后思考优化 首先显然尽量满足需求比较小的,显然如果能 ...
- cestOs 7安装Jenkins
首先到https://jenkins.io/download/下载Jenkins的war包,放在tomcat下.启动tomcat. 打开对应url.后要求输入密码. 在服务器vim .jenkins/ ...
- SRWebSocket
以前有个项目里有做聊天室,就是用的SRWebSocket.现在整理下资料,主要是对网上搜索到的资料进行整合. WebSocket介绍,与Socket的区别 https://blog.csdn.net/ ...
- dedecms站内搜索页面调用最新文章
在页面中调用最新文章列表可以使新发布的文章更快被收录,如何在dedecms站内搜索页面调用最新文章呢? 1.登陆系统后台,进入“模板——模板管理——自定义宏标记”,点击“智能标记向导”进入智能标记生成 ...
- MySQL 5.7 新特性大全和未来展望
引用 美图公司数据库高级 DBA,负责美图后端数据存储平台建设和架构设计.前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计.之前在「高可用架构」发表的&l ...
- iframe子父窗口相互操作方法或元素
一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...