IT民工——发一个万能的JSON解析器吧!

前言
之前一直在用Newtonsoft的json解析,但是实在烂的可以!!!

首先,对于unicode无法解析,竟然跟我删除了\u,返回一堆码(\u6211-> 6211),我都火了!
还有,如果对方json一变,我这边写的class没有同步,就会报错!

最后我只能靠自己,写一个json通用模型去解析了。

概念介绍
还是先简单说说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模型了。

源代码
Code

Code
使用方法
        public CommonJsonModel DeSerialize(string json)
        {
            
return new
 CommonJsonModel(json);
        }

超级简单,只要new一个通用对象,把json字符串放进去就行了。

针对上文的3个例子,我给出3种使用方法:
{"total":0}
CommonJsonModel model = DeSerialize(json);

model.GetValue(
"total"// return 0

{"total":0,"data":{"377149574" : 1}}
CommonJsonModel model = DeSerialize(json);

model.GetModel(
"data").GetValue("377149574"//return 1

{"total":0,"data":{"377149574":[{"cid":"377149574"}]}}
CommonJsonModel model = DeSerialize(json);
model.GetModel("data").GetCollection(
"377149574").GetCollection()[0].GetValue("cid"//return 377149574

这个有点点复杂,
1. 首先在data对象里面,377149574代表了一个集合,所以要用model.GetModel("data").GetCollection("377149574")把这个集合取出来。
2. 其次这个集合里面包含了很多对象,因此用GetColllection()把这些对象取出来
3. 在这些对象List里面取第一个[0],表示取了":{"cid":"377149574"}这个对象,然后再用GetValue("cid")把对象的值取出来。

后记
可能我的思路复杂了点,希望给点建议!谢谢!

IT民工上

2009/8/17


原文地址:https://www.cnblogs.com/zc22/p/1547795.html