金蝶webapi实例

@金蝶调用webapi实例
斜体样式

//工具类Apiconfig
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace KingdeeCodeWx
{
public class ApiConfig
{
public string DbId = string.Empty;
public string UserName = string.Empty;
public string Password = string.Empty;
public int LanId = 2052;
public string UrlBase = string.Empty;

    public ApiConfig(string urlBase, string dbId, string userName, string password, int lanId)
    {
        if (urlBase.EndsWith("/") == false)
        {
            UrlBase = urlBase + "/";
        }
        else
        {
            this.UrlBase = urlBase;
        }
        this.DbId = dbId;
        this.UserName = userName;
        this.Password = password;
        this.LanId = lanId;
    }

    public ApiConfig(string urlBase, string dbId, string userName, string password) : this(urlBase, dbId, userName, password, 2052)
    {
        //this.UrlBase = urlBase;
        //this.DbId = dbId;
        //this.UserName = userName;
        //this.Password = password;
        //this.LanId = 2052;
    }

    public string Format()
    {
        return string.Format("[UrlBase]:{0}[DbId]:{1}[UserName]:{2}[Password]:{3}", UrlBase, DbId, UserName, Password);
    }

}

public class ApiAppConfig : ApiConfig
{
    public string AppId = string.Empty;

    public ApiAppConfig(string urlBase, string dbId, string userName, string password, string appId, int lanId)
        : base(urlBase, dbId, userName, password, lanId)
    {
        this.AppId = appId;
    }


    public ApiAppConfig(string urlBase, string dbId, string userName, string password, string appId) : this(urlBase, dbId, userName, password, appId, 2052)
    {
        //this.UrlBase = urlBase;
        //this.DbId = dbId;
        //this.UserName = userName;
        //this.Password = password;
        //this.LanId = 2052;
    }

}

}
//工具类
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace KingdeeCodeWx
{
public static class ApiUtils
{
public static bool LoginByAppSecret(ApiAppConfig apiConfig)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = apiConfig.UrlBase + “Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret.common.kdsvc”;
List Parameters = new List();
Parameters.Add(apiConfig.DbId);//帐套Id
Parameters.Add(apiConfig.UserName);//用户名
Parameters.Add(apiConfig.AppId);//appid
Parameters.Add(apiConfig.Password);//密码
Parameters.Add(apiConfig.LanId);
httpClient.Content = JsonConvert.SerializeObject(Parameters);
string loginResult = httpClient.AsyncRequest();
if (string.IsNullOrWhiteSpace(loginResult))
{
return false;
}
else
{
if (loginResult.Contains(“IsSuccessByAPI”))
{
return JObject.Parse(loginResult)[“IsSuccessByAPI”].Value();
}
else
{
return JObject.Parse(loginResult)[“LoginResultType”].Value() == 1;
}
}
}

    public static string LoginByAppSecretRetResult(ApiAppConfig apiConfig)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = apiConfig.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret.common.kdsvc";
        List<object> Parameters = new List<object>();
        Parameters.Add(apiConfig.DbId);//帐套Id
        Parameters.Add(apiConfig.UserName);//用户名
        Parameters.Add(apiConfig.AppId);//appid
        Parameters.Add(apiConfig.Password);//密码
        Parameters.Add(apiConfig.LanId);
        httpClient.Content = JsonConvert.SerializeObject(Parameters);
        return httpClient.AsyncRequest();

    }

    public static bool LoginHttp(ApiConfig apiConfig, out string loginResult)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = apiConfig.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";
        List<object> Parameters = new List<object>();
        Parameters.Add(apiConfig.DbId);//帐套Id
        Parameters.Add(apiConfig.UserName);//用户名
        Parameters.Add(apiConfig.Password);//密码
        Parameters.Add(apiConfig.LanId);
        httpClient.Content = JsonConvert.SerializeObject(Parameters);
        loginResult = httpClient.AsyncRequest();
        if (string.IsNullOrWhiteSpace(loginResult))
        {
            return false;
        }
        else
        {
            if (loginResult.Contains("IsSuccessByAPI"))
            {
                return JObject.Parse(loginResult)["IsSuccessByAPI"].Value<bool>();
            }
            else
            {
                return JObject.Parse(loginResult)["LoginResultType"].Value<int>() == 1;
            }
        }

    }

    public static string LoginHttpRetResult(ApiConfig apiConfig)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = apiConfig.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";
        List<object> Parameters = new List<object>();
        Parameters.Add(apiConfig.DbId);//帐套Id
        Parameters.Add(apiConfig.UserName);//用户名
        Parameters.Add(apiConfig.Password);//密码
        Parameters.Add(apiConfig.LanId);
        httpClient.Content = JsonConvert.SerializeObject(Parameters);
        return httpClient.AsyncRequest();
    }

    public static string GetErrorMsg(string opResultStr)
    {
        string err = string.Empty;

        if (string.IsNullOrWhiteSpace(opResultStr))
        {
            return err;
        }

        JObject resOpObj = JObject.Parse(opResultStr);
        JObject resObj = resOpObj["Result"] as JObject;
        JObject statusObj = resObj["ResponseStatus"] as JObject;
        string isSuccessStr = Convert.ToString(statusObj["IsSuccess"]);
        if (string.Compare(isSuccessStr, "true", true) != 0)
        {
            JArray errs = statusObj["Errors"] as JArray;
            if (errs != null && errs.Count > 0)
            {
                JObject defErr = errs[0] as JObject;
                err = Convert.ToString(defErr["Message"]);
            }
            else
            {
                err = opResultStr;
            }
        }
        return err;
    }

    public static object BuildApiJsonResult(bool success, string msg = "", string errMsg = "", string data = "", string id = "", string billNO = "")
    {
        JObject result = new JObject();
        result["IsSuccess"] = success;
        result["Errors"] = string.Empty;
        result["Message"] = msg;
        result["Datas"] = data;

        result["ID"] = id;
        result["BillNO"] = billNO;
        result["BillStatus"] = billNO;

        return result;
    }

    public static object BuildCloudApiJsonFailResult(List<string> errMsg)
    {
        JObject rst = new JObject();
        JObject result = new JObject();
        JObject responseStatus = new JObject();
        responseStatus["IsSuccess"] = false;

        JArray errArray = new JArray();

        if (errMsg != null && errMsg.Count > 0)
        {
            foreach (var errMsgItem in errMsg)
            {
                JObject errMsgItemJobj = new JObject();
                errMsgItemJobj["Message"] = errMsgItem;

                errArray.Add(errMsgItemJobj);
            }
        }
        responseStatus["Errors"] = errArray;
        result["ResponseStatus"] = responseStatus;
        rst["Result"] = result;
        return rst;
    }

    public static object BuildCloudApiJsonSimpleSuccessResult()
    {
        JObject rst = new JObject();
        JObject result = new JObject();
        JObject responseStatus = new JObject();
        responseStatus["IsSuccess"] = true;

        JArray errArray = new JArray();
        responseStatus["Errors"] = errArray;
        result["ResponseStatus"] = responseStatus;
        rst["Result"] = result;
        return rst;
    }

    /// <summary>
    /// 新增、修改接口
    /// </summary>
    /// <param name="config"></param>
    /// <param name="formId"></param>
    /// <param name=""></param>
    /// <returns></returns>
    public static string Save(ApiConfig config, string formId, JObject model)
    {
        return ApiUtils.Save(config, formId, model, true);
    }

    /// <summary>
    /// 新增、修改接口
    /// </summary>
    /// <param name="config"></param>
    /// <param name="formId"></param>
    /// <param name=""></param>
    /// <returns></returns>
    public static string Save(ApiConfig config, string formId, JObject model, bool isAutoSubmitAndAudit)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc";

        List<object> Parameters = new List<object>();
        Parameters.Add(formId);

        JObject Json = new JObject();
        // Json.Add("IsAutoSubmitAndAudit", isAutoSubmitAndAudit);
        // Json.Add("IsAutoSubmitAndAudit", true);
        Json.Add("IsAutoSubmitAndAudit", false);
        Json.Add("Model", model);
  
     

        Parameters.Add(Json.ToString());
        httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
        string result = httpClient.AsyncRequest();

        return result;
    }


    public static string Submit(ApiConfig config, string formId, List<string> billIds)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc";

        List<object> Parameters = new List<object>();
        Parameters.Add(formId);

        JObject Json = new JObject();

        Json.Add("Ids", string.Join(",", billIds));

        Parameters.Add(Json.ToString());
        httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
        string result = httpClient.AsyncRequest();

        return result;
    }

    public static string Audit(ApiConfig config, string formId, List<string> billIds)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc";

        List<object> Parameters = new List<object>();
        Parameters.Add(formId);

        JObject Json = new JObject();

        Json.Add("Ids", string.Join(",", billIds));

        Parameters.Add(Json.ToString());
        httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
        string result = httpClient.AsyncRequest();

        return result;
    }



    public static string Submit(ApiConfig config, string formId, List<string> billNos, JObject model)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc";

        List<object> Parameters = new List<object>();
        Parameters.Add(formId);

        JObject Json = new JObject();

        JArray arr = new JArray();

        foreach (var item in billNos)
        {
            arr.Add(item);
        }

        Json.Add("Model", model);

        Parameters.Add(Json.ToString());
        httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
        string result = httpClient.AsyncRequest();

        return result;
    }


    public static string Delete(ApiConfig config, string formId, List<string> billIds)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Delete.common.kdsvc";

        List<object> Parameters = new List<object>();
        Parameters.Add(formId);
        //Json字串
        JObject Json = new JObject();

        Json.Add("CreateOrgId", 0);

        //JArray arr = new JArray();

        //foreach (var item in billIds)
        //{
        //    arr.Add(Convert.ToInt64(item));
        //}

        Json.Add("Ids", string.Join(",", billIds));

        Parameters.Add(Json.ToString());
        httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
        string result = httpClient.AsyncRequest();

        return result;
    }


    public static string Audit(ApiConfig config, string formId, List<string> billNos, JObject model)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc";

        List<object> Parameters = new List<object>();
        Parameters.Add(formId);

        JObject Json = new JObject();

        JArray arr = new JArray();

        foreach (var item in billNos)
        {
            arr.Add(item);
        }

        Json.Add("Model", model);

        Parameters.Add(Json.ToString());
        httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
        string result = httpClient.AsyncRequest();

        return result;
    }


    public static bool CheckApiOpIsSuccess(string resultString)
    {
        bool rst = false;

        if (string.IsNullOrWhiteSpace(resultString))
        {
            return false;
        }

        try
        {
            JObject rootObj = JObject.Parse(resultString);
            JObject restObj = rootObj["Result"] as JObject;
            JObject responseStatus = restObj["ResponseStatus"] as JObject;

            return string.Compare(Convert.ToString(responseStatus["IsSuccess"]), "True", true) == 0;
        }
        catch
        {
            rst = false;
        }


        return rst;
    }

  //  public static string ExecuteBillQuery(ApiConfig config, string formId, string fieldKeys, string filter)
    public static string ExecuteBillQuery(ApiConfig config, string formId, string fieldKeys, string filter)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc";

        List<object> Parameters = new List<object>();

        JObject Json = new JObject();
        Json.Add("FormId", formId);

      
        //Json.Add("FieldKeys", "FBILLNO,FMATERIALID.FNAME,FEntity_FentryId");
        Json.Add("FieldKeys", fieldKeys);
        //Json.Add("FilterString", "FBILLNO='CGRK00024'");
        Json.Add("FilterString", filter);            //Json.Add("FilterString", "fnumber='XXXX' ");
        //Json.Add("FieldKeys", "fnumber");

        Parameters.Add(Json.ToString());
        httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
        string result = httpClient.AsyncRequest();

        var ass = JArray.Parse(result);

        return result;

    }

    public static long TryGetExeQueryBillId(string apiQueryStr)
    {
        int rst = -1;
        if (string.IsNullOrWhiteSpace(apiQueryStr))
        {
            return rst;
        }

        try
        {
            //[[100080]]
            JArray arr = JArray.Parse(apiQueryStr);
            JArray innerArr = arr[0] as JArray;
            string idStr = Convert.ToString(innerArr[0]);
            return Convert.ToInt64(idStr);
        }
        catch
        {
            return rst;
        }

    }


    //        {
    //	"Result": {
    //		"ResponseStatus": {
    //			"IsSuccess": true,
    //			"Errors": [],
    //			"SuccessEntitys": [{
    //				"Id": 110080,
    //				"Number": "CGRK00064",
    //				"DIndex": 0

    //            }],
    //			"SuccessMessages": [],
    //			"MsgCode": 0
    //		},
    //		"Id": 110080,
    //		"Number": "CGRK00064",
    //		"NeedReturnData": [{}]
    //	}
    //}



    //{
    //	"Result": {
    //		"ResponseStatus": {
    //			"ErrorCode": 500,
    //			"IsSuccess": false,
    //			"Errors": [{
    //				"FieldName": "FPriceUnitID",
    //				"Message": "单据体“明细信息”第1行字段“计价单位”是必填项",
    //				"DIndex": 0
    //			}, {
    //				"FieldName": "FRemainInStockUnitId",
    //				"Message": "单据体“明细信息”第1行字段“采购单位”是必填项",
    //				"DIndex": 0
    //			}, {
    //				"FieldName": "FMaterialId",
    //				"Message": "单据体“明细信息”第1行字段“物料编码”是必填项",
    //				"DIndex": 0
    //			}, {
    //				"FieldName": "",
    //				"Message": "第1行分录,计价数量必须大于0",
    //				"DIndex": 0
    //			}, {
    //				"FieldName": "",
    //				"Message": "第1行分录,采购数量必须大于0",
    //				"DIndex": 0
    //			}, {
    //				"FieldName": "",
    //				"Message": "第1行分录,库存单位只能为与基本单位为固定换算的单位",
    //				"DIndex": 0
    //			}, {
    //				"FieldName": "",
    //				"Message": "单据货主和保管者必须至少有一项与库存组织一致",
    //				"DIndex": 0
    //			}],
    //			"SuccessEntitys": [],
    //			"SuccessMessages": [],
    //			"MsgCode": 0
    //		},
    //		"Id": "",
    //		"NeedReturnData": [{}]
    //	}
    //}



}

public static class Extends
{
    public static bool IsSuccess(this JObject obj)
    {
        if (obj == null)
        {
            return false;
        }

        return string.Compare(Convert.ToString(obj["IsSuccess"]), "true", true) == 0;
    }

    public static string GetLogStr(this JObject obj)
    {
        if (obj == null)
        {
            return string.Empty;
        }

        string rst = Convert.ToString(obj).Replace(" ", "").Replace(Environment.NewLine, "");
        return rst;
    }
}

}
//工具类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;

namespace KingdeeCodeWx
{

public class HttpClient
{
    /// <summary>
    /// Seivice URL
    /// </summary>
    public string Url { get; set; }
    /// <summary>
    /// 内容
    /// </summary>
    public string Content { get; set; }
    /// <summary>
    /// Cookie,保证登录后,所有访问持有一个Cookie;
    /// </summary>
    static CookieContainer Cookie = new CookieContainer();

    /// <summary>
    /// HTTP访问
    /// </summary>
    public string AsyncRequest()
    {
        HttpWebRequest httpRequest = HttpWebRequest.Create(Url) as HttpWebRequest;
        httpRequest.Method = "POST";
        httpRequest.ContentType = "application/json";
        httpRequest.CookieContainer = Cookie;
        httpRequest.Timeout = 1000 * 60 * 10;//10min

        using (Stream reqStream = httpRequest.GetRequestStream())
        {
            JObject jObj = new JObject();
            jObj.Add("format", 1);
            jObj.Add("useragent", "ApiClient");
            jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString());
            jObj.Add("parameters", Content);
            jObj.Add("timestamp", DateTime.Now);
            jObj.Add("v", "1.0");
            string sContent = jObj.ToString();
            var bytes = UnicodeEncoding.UTF8.GetBytes(sContent);
            reqStream.Write(bytes, 0, bytes.Length);
            reqStream.Flush();
        }
        using (var repStream = httpRequest.GetResponse().GetResponseStream())
        {
            using (var reader = new StreamReader(repStream))
            {
                return ValidateResult(reader.ReadToEnd());
            }
        }
    }

    private static string ValidateResult(string responseText)
    {
        if (responseText.StartsWith("response_error:"))
        {
            return responseText.TrimStart("response_error:".ToCharArray());
        }
        return responseText;
    }
}

}
//查询 及其数据格式转换
public string select() {

//需要查询的数据
StringBuilder FieldKeys = new StringBuilder();
//单据编号
FieldKeys.Append(“FBillNo,”);
//单据类型
FieldKeys.Append(“FBillTypeID,”);
//日期
FieldKeys.Append(“FDate,”);
//销售组织
FieldKeys.Append(“FSaleOrgId.Fnumber,”);
FieldKeys.Append(“FSaleOrgId.Fname,”);
//发货组织
FieldKeys.Append(“FStockOrgId.Fnumber,”);
FieldKeys.Append(“FStockOrgId.Fname,”);
//客户
FieldKeys.Append(“FCustomerID.Fnumber,”);
FieldKeys.Append(“FCustomerID.Fname,”);
//仓管员
FieldKeys.Append(“FStockerID.Fnumber,”);
FieldKeys.Append(“FStockerID.Fname,”);
//物料
FieldKeys.Append(“FMaterialID.Fnumber,”);
FieldKeys.Append(“FMaterialName,”);
//仓库
FieldKeys.Append(“FStockID.Fnumber,”);
FieldKeys.Append(“FStockID.Fname,”);
//仓位
FieldKeys.Append(“FEntity_FENTRYID,”);
FieldKeys.Append(“FEntrynote,”);
//单价
FieldKeys.Append(“FPrice,”);
//实发数量
FieldKeys.Append(“FRealQty,”);
//应发数量
FieldKeys.Append(“FMustQty,”);
//金额
FieldKeys.Append(“FAmount,”);
//结算组织
FieldKeys.Append(“FSettleOrgID.Fnumber,”);
FieldKeys.Append(“FSettleOrgID.Fname,”);
//结算币别
FieldKeys.Append(“FSettleCurrID.Fnumber,”);
FieldKeys.Append(“FSettleCurrID.Fname,”);
//库存单位
FieldKeys.Append(“FUnitID.Fnumber,”);
FieldKeys.Append(“FUnitID.Fname,”);
//货主
FieldKeys.Append(“FOwnerID.Fnumber,”);
FieldKeys.Append(“FOwnerID.Fname,”);
//FID FEntity_FENTRYID 单据主键,分录主键
FieldKeys.Append(“FID,”);
//含税单价
FieldKeys.Append(“FTaxPrice,”);
FieldKeys.Append(“FAmount_LC,”);
// FieldKeys.Append(“FEntity_FENTRYID,”);
// FieldKeys.Append(“FSTOCKLOCID.FF100001.Fnumber,”);
// FieldKeys.Append(“FSTOCKLOCID.FF100002.Fnumber,”);
FieldKeys.ToString();
//formid
string formid = “SAL_OUTSTOCK”;
//调用查询方法
string result = ApiUtils.ExecuteBillQuery(Login.apiinfo, formid, FieldKeys.ToString(),string.Empty);
//开始对查询出来的数据进行处理
JArray json = JArray.Parse(result);
string jsonresult = “[”;
List list2jo = new List();
foreach (JArray item in json)
{
JObject jsonlist = new JObject();
jsonlist[“FBillNo”] = item[0].ToString();
jsonlist[“FBillTypeID”] = item[1].ToString();
jsonlist[“FDate”] = item[2].ToString();
jsonlist[“FSaleOrgIdFnumber”] = item[3].ToString();
jsonlist[“FSaleOrgIdFname”] = item[4].ToString();

            jsonlist["FStockOrgIdFnumber"] = item[5].ToString();
            jsonlist["FStockOrgIdFname"] = item[6].ToString();
            jsonlist["FCustomerIDFnumber"] = item[7].ToString();
            jsonlist["FCustomerIDFname"] = item[8].ToString();
            jsonlist["FStockerIDFnumber"] = item[9].ToString();

            jsonlist["FStockerIDFname"] = item[10].ToString();
            jsonlist["FMaterialIDFnumber"] = item[11].ToString();
            jsonlist["FMaterialName"] = item[12].ToString();
            jsonlist["FStockIDFnumber"] = item[13].ToString();
            jsonlist["FStockIDFname"] = item[14].ToString();

            jsonlist["FEntity_FENTRYID"] = item[15].ToString();
            jsonlist["FEntrynote"] = item[16].ToString();

            double Fprice = Convert.ToDouble(item[17].ToString());
            jsonlist["FPrice"] = item[17].ToString();

            double FRealQty = Convert.ToDouble(item[18].ToString());
            jsonlist["FRealQty"] = item[18].ToString();

            jsonlist["FMustQty"] = item[19].ToString();


            double sumprice = Convert.ToDouble(item[20].ToString());
            jsonlist["FAmount"] = item[20].ToString();

            jsonlist["FSettleOrgIDFnumber"] = item[21].ToString();
            jsonlist["FSettleOrgIDFname"] = item[22].ToString();
            jsonlist["FSettleCurrIDFnumber"] = item[23].ToString();
            jsonlist["FSettleCurrIDFname"] = item[24].ToString();

            jsonlist["FUnitIDFnumber"] = item[25].ToString();
            jsonlist["FUnitIDFname"] = item[26].ToString();
            jsonlist["FOwnerIDFnumber"] = item[27].ToString();
            jsonlist["FOwnerIDFname"] = item[28].ToString();
            jsonlist["FID"] = item[29].ToString();
            //  jsonlist["FEntity_FENTRYID"] = item[30].ToString();
            jsonlist["FTaxPrice"] = item[30].ToString();

            jsonlist["FAmount_LC"] = item[31].ToString();
            jsonresult += jsonlist + ",";
        }

        string js = jsonresult.Substring(0, jsonresult.Length - 1);
        string lastjson = js + "]";
        return lastjson;
    }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值