/// <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);
            }
        }