/// <summary> /// 因为weixin的SB接口返回的JSON格式不固定 /// 所以需要特别解析 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="json"></param> /// <param name="error"></param> /// <returns></returns> public static T Parse <T>(string json, ref WeixinApiErrorResult error) where T : class, new() { if (String.IsNullOrEmpty(json)) { error = new WeixinApiErrorResult(); error.ErrorMessage = "JSON Parse Error"; return(null); } /* * 有些接口在成功时,并不返回特别的JSON,而是使用 errcode 一样的格式,用多加字段的方式返回 * 所以除了要判断有没有errcode,还要判断它的值,0表示成功 */ JObject jObject = JObject.Parse(json); JToken jToken = jObject["errcode"]; if (jToken != null && jToken.Value <int>() != 0) //&& jToken.HasValues 为false,原因不明 //&& jToken.Value<int>() != 0 { //Debug.Assert(jToken.Value<int>() != 0, ""); error = JsonConvert.DeserializeObject <WeixinApiErrorResult>(json); return(null); } else { T result = JsonConvert.DeserializeObject <T>(json); return(result); } }
/// <summary> /// 专门用来处理 /// {"errcode":40013,"errmsg":"invalid appid"} /// {"errcode": 0, "errmsg": "ok"} /// 这种固定格式的json /// </summary> /// <param name="json"></param> /// <returns></returns> public static WeixinApiErrorResult Parse(string json) { WeixinApiErrorResult error = new WeixinApiErrorResult(); if (String.IsNullOrEmpty(json)) { error.ErrorCode = -1; error.ErrorMessage = "JSON Parse Error"; return(error); } /* * 有些接口在成功时,并不返回特别的JSON,而是使用 errcode 一样的格式,用多加字段的方式返回 * 所以除了要判断有没有errcode,还要判断它的值,0表示成功 */ JObject jObject = JObject.Parse(json); JToken jToken = jObject["errcode"]; if (jToken != null) //&& jToken.HasValues 为false,原因不明 //&& jToken.Value<int>() != 0 { error = JsonConvert.DeserializeObject <WeixinApiErrorResult>(json); return(error); } else { error.ErrorCode = -1; error.ErrorMessage = "JSON Parse Error"; return(error); } }