zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    SpringMVC详解
    会话控制cookie和session
    jsp详解
    Jquery Enter事件
    JS获取request字符串
    net 2.0使用ajax
    C#通过WebClient/HttpWebRequest实现http的post/get方法
    WCF Rest:不使用UriTemplate使用post方式传参解决HTTP400问题以及参数映射问题
    关于ASP.NET 中站点地图sitemap 的使用
    Web.config自定义节点configSections
  • 原文地址:https://www.cnblogs.com/zc22/p/1547795.html
Copyright © 2011-2022 走看看