zoukankan      html  css  js  c++  java
  • WP7 Json 解析那些事儿(下)

    好吧,距离上篇时间时间很长了,因为本人平时工作很忙,又懒,更新的频率比较低

    这次接着上篇的说,上篇说过,用Ms自带的序列化反序列化的方法来解析Json有缺陷,这也是我在项目实践中遇到过的,之前一直没弄明白用什么办法,入下面的Json串:

            public string sJson = @"{'infocode':'000000','result':{'cb':'state##0','cate':'29','isonline':'0','mobilelocation':'广州',
    'c':'转靓仔五菱之光,车况一流,绝无事故,机头静,空调冻,真皮座椅,铝铃,刚买保险年审,手续齐全包过户或迁出,白云区太和镇派出所往华南快线方向走800米即到.',
    'a':'113.2644230#23.1290750','z2':['预售价格','1.8万元'],'z3':'区域##广州','m':'3133383234343635363833','im':'823478','url':'http.shtml','v':'4490','
    'isbiz':'','t':'(出售)转豪华版7座1.1L 五菱之光','r':'陆生','p':['http17240742790669.jpg','http://p1/tiny/n_17240752458508.jpg','http://748428.jpg','http://p1/tiny/n_17240767232010.jpg'],
    'ci':'','z':'2012-03-09 10:17','sinacode':'123987651045','catename':'二手车',
    'x':['品牌车系##五菱五菱之光','车辆类型##面包车','基本参数##多彩色','上牌时间##2005年','行驶里程##8万公里'],'waring':'①要求预付定金、加Q详聊网站!'}}'
    ";

    用jsonviewer来查看出来的结构大体如下

    • result:
       
      {
      • cb: "state##0",
      • cate: "29",
      • isonline: "0",
      • mobilelocation: "广州",
      • c: "转靓仔五菱之光,车况一流,绝无事故,机头静,空调冻,真皮座椅,铝铃,刚买保险年审,手续齐全包过户或迁出,白云区太和镇派出所往华南快线方向走800米即到.",
      • a: "113.2644230#23.1290750",
      • z2:
         
        [
        • "预售价格",
        • "1.8万元"
        ],
      • z3: "区域##广州",
      • m: "3133383234343635363833",
      • v: "4490",
      • isbiz: "",
      • t: "(出售)转豪华版7座1.1L 五菱之光",
      • r: "陆生",
      • ci: "",
      • z: "2012-03-09 10:17",
      • catename: "二手车",
      • x:[
        • "品牌车系##五菱五菱之光",
        • "车辆类型##面包车",
        • "基本参数##多彩色",
        • "上牌时间##2005年",
        • "行驶里程##8万公里"
        ],
      • waring: "①要求预付定金、加Q详聊、邮寄交易等均存在欺骗行为!##②价格低廉、内容里留有电话的要谨慎!##③谨防以任何形式冒用58网址的钓鱼网站!"
      }

    }上面涉及隐私的我删掉了,重要的是看这个Json和之前的有什么不同,其实最大的地方在于有个数组,比如说z2作为key,它的子项是一个数组

    这个数组有value没key。而我查阅了一下,这样也确实合乎Json协议的规范,这样的jSON,使用我们上一篇所用的方法,貌似就不行了(当然不敢说百分百,如果

    哪位哥们用微软自带的序列类,可以解析这样的Json串,还请告知,给本人扫扫盲,呵呵)

    我采用的解决方法是利用到了一个第三方库,Newtonsoft.Json.WindowsPhone.dll,具体下载和引用,就不多说了,网上很多。

    这个库很强大,我们一般仅用一小部分就可以解决我们遇到的问题,有几个关键的类需要好好学习:JObject  JArray  JProperty JValue

     最强大的一个类:JObject,所有的string json串都可以通过一个静态方法转化成json对象,然后进行Linq to Json操作

    JObject o = JObject.Parse(json);

    其中所有的类都派生于JToken,也就是说所有的LINQ to JSON对象都可以用JToken来表示,即JObject、JProperty还是JArray JValue都可以利用李氏替换原则而用JToken来表示。认清这一点是非常必要的,因为接下来的示例中将多次用到他们之间的类型转换。

    那么之前的Json我用以下的解析函数来解析

            private TJsonData ParsePostDetail(string sJson)
    {
    JObject jObj = JObject.Parse(sJson);
    string infoCode = (string)jObj["infocode"];
    TJsonData jsonData = new TJsonData();
    jsonData.AddInfoCode(infoCode);
    if (infoCode == "000000")
    {
    var result = jObj["result"];
    foreach (var item in result)
    {
    if (item is JProperty)
    {
    JProperty itemTmp = item as JProperty;
    if (itemTmp.Value is JValue)
    {
    JValue jv = (JValue)itemTmp.Value;
    string js = (string)jv.Value;
    jsonData.AddResultProperty(itemTmp.Name, js);
    }
    else if (itemTmp.Value is JArray)
    {
    JArray ja = (JArray)itemTmp.Value;
    string[] jaContent = new string[ja.Count];
    int index = 0;
    foreach (JValue it in ja)
    {
    jaContent[index] = (string)it.Value;
    index++;
    }
    jsonData.AddResultArray(itemTmp.Name, ja.Count, jaContent);
    }
    }
    }
    }
    return jsonData;
    }
  • 相关阅读:
    Codeforces Round #365 (Div. 2) D
    Codeforces Round #414 C. Naming Company
    Codeforces Round #365 (Div. 2) B
    LA 6893 The Big Painting(矩阵Hash)
    Gym100783C Golf Bot(FFT)
    POJ 2481 Cows(树状数组)
    POJ 2352 Stars
    POJ 2299 Ultra-QuickSort(树状数组+离散化)
    LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)
    LightOJ 1356 Prime Independence(质因数分解+最大独立集+Hopcroft-Carp)
  • 原文地址:https://www.cnblogs.com/Peterahan/p/2387053.html
Copyright © 2011-2022 走看看